Что такое замыкание (closure) в Python на пальцах?
Слышал слово «замыкание/closure» применительно к функциям. Не могу понять, что это и зачем. Можете объяснить максимально на пальцах с простым примером?
3 ответа
Замыкание — это когда внутренняя функция «запоминает» переменные из внешней функции, даже после того как внешняя уже отработала и завершилась.
def make_multiplier(n):
def multiplier(x):
return x * n # помнит n из внешней функции
return multiplier
double = make_multiplier(2)
triple = make_multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15
Здесь make_multiplier уже завершилась, но double всё ещё помнит, что n = 2, а triple — что n = 3. Внутренняя функция как бы «замкнула» на себе это значение — отсюда и название.
Зачем: создавать функции-настройки (как double/triple выше), фабрики функций, декораторы. По сути это лёгкая альтернатива классу, когда нужно «функция + немного запомненного состояния».
Это внутренняя функция, которая помнит переменные внешней функции после её завершения. На этом построены декораторы.
Функция, запомнившая своё окружение.