Функции могут не только возвращать данные, но также принимают их, что реализуется с помощью так называемых параметров, которые указываются в скобках в заголовке функции. Количество параметров может быть любым, также существует несколько вариантов передачи аргументов в функцию
Параметры функции представляют собой локальные переменные, которым присваиваются значения в момент ее вызова. Иногда у параметрам задают значения (аргументы), используемые по умолчанию. Конкретные значения, которые передаются в функцию при ее вызове, называются аргументами.
Каждый раз, когда вызывается функция, создается новая область видимости для хранения локальных переменных этой функции и каждое имя передаваемого параметра связывается со значениями в новом локальном пространстве имен. Когда функция возвращает значение или завершает выполнение иным способом, это пространство имен уничтожается.
Параметры (аргументы) функции передаются в локальную область видимости с использованием вызова по значению, где значение всегда является ссылкой на объект, а не значением объекта.
def func (a, b): a = a * b b = a / 2 return a + b n1 = 10 n2 = 5 rez = func(n1, n2) print(rez) print(n1, n2) # напечатает 75,0 10 5
Изменение значений a
и b
в теле функции никак не скажется на значениях переменных n1
и n2
, определенных в глобальном пространстве. Они останутся прежними. Говорят, что в функцию данные передаются по значению. Когда a
присваивалось число 10, то это было уже другое число, не то, на которое ссылается переменная n1
. Число 10 было скопировано и помещено в отдельную ячейку памяти для переменной a
.
Необходимость передачи по ссылке связана в первую очередь с экономией памяти. Сложные типы данных, по сути представляющие собой структуры данных, обычно копировать не целесообразно. Однако, если надо, всегда можно сделать это принудительно.
Аргумент - это значение, передаваемое функции (или методу) при вызове функции.
Есть два типа аргументов:
ключевой аргумент: аргумент, которому предшествует идентификатор (например, name=
) в вызове функции или переданный как значение в словаре, которому предшествует две звездочки **
- обозначение распаковки словаря.
Например, 3 и 5 являются аргументами ключевого слова в следующих вызовах встроенной функции complex()
:
# передача значений ключевым # аргументам функции complex(real=3, imag=5) dict_args ={'real': 3, 'imag': 5} # передача словаря со значениями # ключевых аргументов complex(**dict_args)
позиционный аргумент: аргумент, который не является ключевым аргументом. Позиционные аргументы могут появляться в начале списка аргументов и/или передаваться как элементы итерации, которым предшествует одна звездочка *
- обозначение распаковки итераций (списков/кортежей). Например, 3 и 5 являются позиционными аргументами в следующих вызовах:
# передача значений позиционным # аргументам функции complex(3, 5) tuple_args = (3, 5) # передача кортежа со значениями # позиционных аргументов complex(*tuple_args)
Аргументы назначаются именованным локальным переменным в теле функции. Смотрите правила, регулирующие это назначение в разделе "Что происходит при вызове функции?".
Также смотрите раздел "Варианты передачи аргументов в функцию Python".
Синтаксически, для представления аргумента может использоваться любое выражение, а оцененное значение присваивается локальной переменной.