Замыкание
📌 Что такое замыкание
Замыкание (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?
