Что такое замыкание в Python?

Ответ

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

Почему это полезно? Замыкания позволяют создавать функции с предустановленными параметрами или состояниями. Они часто используются для:

  • Создания фабрик функций.
  • Реализации декораторов.
  • Обработчиков событий (callback-ов).
  • Эмуляции приватных переменных.

Пример:

def outer_func(x):
    # x - переменная из внешней области видимости
    def inner_func(y):
        # inner_func "замыкает" x
        return x + y
    return inner_func

# Создаем замыкание, где x = 10
closure = outer_func(10)

# Вызываем замыкание с новым аргументом y = 5
print(closure(5))  # Выведет 15

В этом примере inner_func сохраняет доступ к значению x=10 из outer_func, даже после того как outer_func завершила работу и вернула inner_func. При вызове closure(5) используется сохраненное x и переданное y.