Замыкание

📌 Что такое замыкание

Замыкание (closure) — это функция, которая запоминает переменные из своей внешней (родительской) области видимости, даже если эта область уже завершила выполнение.

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


🔹 Простой пример

def outer_func(msg):
    def inner_func():
        print(msg)
    return inner_func  # возвращаем функцию, но не вызываем её

say_hello = outer_func("Hello!")
say_hello()  # Hello!

📍 Что происходит:

  1. outer_func("Hello!") возвращает inner_func.

  2. Хотя 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?