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 при ее вызове.
Почему это полезно?