Перейти к содержанию

Функции

Аргументы функции

Функция может принимать arguments и return values:

В следующем примере функция say_hello получает аргумент «имя» и печатает приветствие:

>>> def say_hello(name):
...    print(f'Hello {name}')
...
>>> say_hello('Carlos')
# Hello Carlos

>>> say_hello('Wanda')
# Hello Wanda

>>> say_hello('Rose')
# Hello Rose

Аргументы ключевых слов

Чтобы улучшить читаемость кода, мы должны быть как можно более явными. Мы можем добиться этого в наших функциях, используя Keyword Arguments:

>>> def say_hi(name, greeting):
...    print(f"{greeting} {name}")
...
>>> # without keyword arguments
>>> say_hi('John', 'Hello')
# Hello John

>>> # with keyword arguments
>>> say_hi(name='Anna', greeting='Hi')
# Hi Anna

Возвращаемые значения

При создании функции с помощью оператора def вы можете указать, каким должно быть возвращаемое значение, с помощью оператора return. Оператор return состоит из следующих :

  • Ключевое слово return.

  • Значение или выражение, которое должна вернуть функция.

>>> def sum_two_numbers(number_1, number_2):
...    return number_1 + number_2
...
>>> result = sum_two_numbers(7, 8)
>>> print(result)
# 15

Local и Global области

  • Код в глобальной области не может использовать локальные переменные.

  • Однако локальная область может получить доступ к глобальным переменным.

  • Код в локальной области видимости функции не может использовать переменные в какой-либо другой локальной области видимости.

  • Вы можете использовать одно и то же имя для разных переменных, если они находятся в разных областях. То есть может быть локальная переменная с именем spam и глобальная переменная с таким же именем spam.

global_variable = 'I am available everywhere'

>>> def some_function():
...     print(global_variable)  # because is global
...     local_variable = "only available within this function"
...     print(local_variable)
...
>>> # the following code will throw error because
>>> # 'local_variable' only exists inside 'some_function'
>>> print(local_variable)
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
NameError: name 'local_variable' is not defined

Оператор global

Если вам нужно изменить глобальную переменную внутри функции, используйте оператор global:

>>> def spam():
...     global eggs
...     eggs = 'spam'
...
>>> eggs = 'global'
>>> spam()
>>> print(eggs)

Есть четыре правила, чтобы определить, находится ли переменная в локальной или глобальной области видимости:

  1. Если переменная используется в глобальной области (то есть вне всех функций), то это всегда глобальная переменная.

  2. Если в функции есть глобальный оператор для этой переменной, это глобальная переменная.

  3. В противном случае, если переменная используется в операторе присваивания в функции, это локальная переменная.

  4. Но если переменная не используется в операторе присваивания, это глобальная переменная.

Lambda функции

В Python лямбда-функция — это однострочная анонимная функция, которая может иметь любое количество аргументов, но может иметь только одно выражение.

Из учебника Python 3 lambda — это минимальное определение функции, которое можно использовать внутри выражения. В отличие от FunctionDef, тело содержит один узел.

Однострочное выражение Лямбда-функции могут оценивать только выражение, например, одну строку кода.

Эта функция:

>>> def add(x, y):
...     return x + y
...
>>> add(5, 3)
# 8

Эквивалентно lambda функции:

>>> add = lambda x, y: x + y
>>> add(5, 3)
# 8

Как и обычные вложенные функции, лямбда-выражения также работают как лексические замыкания:

>>> def make_adder(n):
...     return lambda x: x + n
...
>>> plus_3 = make_adder(3)
>>> plus_5 = make_adder(5)

>>> plus_3(4)
# 7
>>> plus_5(4)
# 9