tgoop.com/zen_of_python/4582
Create:
Last Update:
Last Update:
Что такое замыкание и зачем оно нужно
Замыкания (Closures) — понятие, которое кажется сложным при первом знакомстве. Но на самом деле вы уже его скорее всего используете неосознанно, настолько это стало базой.
Представим программу, где пользователь вводит число, нажимает OK, и программа сохраняет это число в список, выводя все введённые значения:
numbers = []
def enter_number(x):
numbers.append(x)
print(numbers)
enter_number(3) # [3]
enter_number(7) # [3, 7]
enter_number(4) # v
Код работает, но есть проблема: переменная
numbers
находится вне функции, то есть она глобальная. Это значит, что:numbers
.Замыкание помогает «связать» данные и логику в одном месте без использования классов:
def enter_number_outer():
numbers = [] # локальная переменная
def enter_number_inner(x):
numbers.append(x)
print(numbers)
return enter_number_inner
Когда мы вызываем внешнюю функцию
enter_number_outer()
, она создаёт свой контекст с переменной numbers
и возвращает внутреннюю функцию, которая имеет к ней доступ.
enter_num = enter_number_outer()
enter_num(3) # [3]
enter_num(7) # [3, 7]
enter_num(4) # [3, 7, 4]
Ключевая идея замыкания:
Внутренняя функция «замыкает» (сохраняет) значения переменных из области видимости внешней функции.
Даже когда
enter_number_outer()
завершает выполнение, её переменные не уничтожаются, потому что они нужны внутренней функции, которая всё ещё существует. Это и есть closure — функция, которая запоминает контекст, в котором была создана.Используйте замыкания, если хотите:
Замыкание — это функция, которая:
#основы
@zen_of_python