53 lines
3.3 KiB
Markdown
53 lines
3.3 KiB
Markdown
|
---
|
|||
|
title: Python Calling Functions
|
|||
|
localeTitle: Функции вызова Python
|
|||
|
---
|
|||
|
Оператор определения функции не выполняет функцию. Выполнение (вызов) функции выполняется с использованием имени функции, за которым следует скобка, в которой содержатся необходимые аргументы (если есть).
|
|||
|
```
|
|||
|
>>> def say_hello():
|
|||
|
... print('Hello')
|
|||
|
...
|
|||
|
>>> say_hello()
|
|||
|
Hello
|
|||
|
```
|
|||
|
|
|||
|
Выполнение функции представляет новую таблицу символов, используемую для локальных переменных функции. Точнее, все присваивания переменных в функции сохраняют значение в таблице локальных символов; в то время как ссылки на переменные сначала рассматриваются в таблице локальных символов, затем в таблицах локальных символов охватывающих функций, затем в глобальной таблице символов и, наконец, в таблице встроенных имен. Таким образом, глобальные переменные не могут быть напрямую назначены значения внутри функции (если не указано в глобальном заявлении), хотя на них можно ссылаться.
|
|||
|
```
|
|||
|
>>> a = 1
|
|||
|
>>> b = 10
|
|||
|
>>> def fn():
|
|||
|
... print(a) # local a is not assigned, no enclosing function, global a referenced.
|
|||
|
... b = 20 # local b is assigned in the local symbol table for the function.
|
|||
|
... print(b) # local b is referenced.
|
|||
|
...
|
|||
|
>>> fn()
|
|||
|
1
|
|||
|
20
|
|||
|
>>> b # global b is not changed by the function call.
|
|||
|
10
|
|||
|
```
|
|||
|
|
|||
|
Фактические параметры (аргументы) для вызова функции вводятся в локальную таблицу символов вызываемой функции при ее вызове; таким образом, аргументы передаются с использованием вызова по значению (где значение всегда является ссылкой на объект, а не значением объекта). Когда функция вызывает другую функцию, для этого вызова создается новая таблица локальных символов.
|
|||
|
```
|
|||
|
>>> def greet(s):
|
|||
|
... s = "Hello " + s # s in local symbol table is reassigned.
|
|||
|
... print(s)
|
|||
|
...
|
|||
|
>>> person = "Bob"
|
|||
|
>>> greet(person)
|
|||
|
Hello Bob
|
|||
|
>>> person # person used to call remains bound to original object, 'Bob'.
|
|||
|
'Bob'
|
|||
|
```
|
|||
|
|
|||
|
Аргументы, используемые для вызова функции, не могут быть переназначены функцией, но аргументы, которые ссылаются на изменяемые объекты, могут изменить их значения:
|
|||
|
```
|
|||
|
>>> def fn(arg):
|
|||
|
... arg.append(1)
|
|||
|
...
|
|||
|
>>> a = [1, 2, 3]
|
|||
|
>>> fn(a)
|
|||
|
>>> a
|
|||
|
[1, 2, 3, 1]
|
|||
|
|
|||
|
```
|