Замыкание
📌 Что такое замыкание
Замыкание (closure) — это функция, которая запоминает переменные из своей внешней (родительской) области видимости, даже если эта область уже завершила выполнение.
То есть, у нас есть функция внутри функции, и внутренняя функция использует переменные из внешней функции без передачи их через аргументы.
🔹 Простой пример
def outer_func(msg):
def inner_func():
print(msg)
return inner_func # возвращаем функцию, но не вызываем её
say_hello = outer_func("Hello!")
say_hello() # Hello!📍 Что происходит:
outer_func("Hello!")возвращаетinner_func.Хотя
outer_funcуже закончила работу,inner_funcвсё ещё помнит значениеmsgиз внешней области.
🔹 Как узнать, что это замыкание
Можно посмотреть на атрибут __closure__:
print(say_hello.__closure__) # (<cell at 0x...: str object at ...>,)
print(say_hello.__closure__[0].cell_contents) # Hello!📍 Применение замыканий
✅ Фабрики функций — когда нужно динамически создавать функции с разными настройками.
✅ Сохранение состояния без использования классов.
✅ Декораторы в Python почти всегда используют замыкания.
✅ В тестах — для сохранения ожидаемых значений, конфигураций.
Last updated
Was this helpful?