def outer_function():
def inner_function(x):
return x * 2
return inner_function
my_func = outer_function()
result = my_func(5) # result будет равен 10
Функция outer_function
возвращает inner_function
. Затем возвращенная функция может быть вызвана как my_func(5)
.
Да, в Python функции являются объектами первого класса (first-class citizens). Это означает, что функции можно передавать как аргументы другим функциям, возвращать из функций, и присваивать переменным.
Как вернуть функцию из функции:
def outer_function(message):
"""Внешняя функция, принимающая сообщение."""
def inner_function():
"""Внутренняя функция, использующая сообщение из внешней функции."""
print(message)
return inner_function # Возвращаем внутреннюю функцию (не вызываем ее!)
# Пример использования:
my_function = outer_function("Привет, мир!") # Получаем inner_function
my_function() # Вызываем inner_function, которая печатает "Привет, мир!"
Объяснение:
outer_function
принимает аргумент message
.
outer_function
определена inner_function
, которая замыкается (closure) на переменную message
из области видимости outer_function
. Это значит, что даже после того, как outer_function
завершит свою работу, inner_function
сохранит доступ к значению message
.
outer_function
возвращает inner_function
без ее вызова (обратите внимание на отсутствие скобок ()
после inner_function
в операторе return
).
outer_function("Привет, мир!")
переменной my_function
, my_function
становится ссылкой на inner_function
.
my_function()
, мы фактически вызываем inner_function
, которая, благодаря замыканию, печатает значение message
, которое было передано в outer_function
при ее вызове.
Почему это полезно?