Замыкания

Обновлено: 2024-03-12
2 мин

Содержание

Замыкание в Python - это функция, которая запоминает значения из внешней области видимости, даже если эта область видимости больше не существует. Таким образом, замыкание позволяет функции использовать переменные, которые были определены вне самой функции.

Пример:

def outer_func(x):
    def inner_func(y):
        return x + y
    return inner_func

closure = outer_func(10)
result = closure(5)
print(result)  # выводит 15

В этом примере outer_func возвращает inner_func, которая запоминает значение x. Затем outer_func вызывается, и возвращаемая функция сохраняется в closure. Затем closure вызывается с аргументом 5, и она использует сохраненное значение x (которое равно 10), чтобы вернуть результат 15.

Замыкания могут быть полезны для создания функций, которые сохраняют состояние между вызовами, а также для создания функций, которые могут быть адаптированы к различным сценариям использования, например для создания функций, которые возвращают другие функции в зависимости от переданных аргументов.

Ниже приведен другой пример замыкания, который возвращает функцию, которая будет умножать аргумент на заданное число:

def multiply_by(num):
    def multiplier(n):
        return n * num
    return multiplier

double = multiply_by(2)
triple = multiply_by(3)
print(double(5))  # выводит 10
print(triple(5))  # выводит 15

В этом примере multiply_by возвращает функцию multiplier, которая запоминает значение num. Затем мы вызываем multiply_by два раза с аргументами 2 и 3 соответственно, и сохраняем возвращаемые функции в переменных double и triple.

Затем мы вызываем каждую из этих функций с аргументом 5, и каждая функция использует сохраненное значение num (которое равно 2 для double и 3 для triple) для умножения аргумента и возврата результата.