Что такое замыкание
Замыкание (closure) — это функция, которая запоминает окружающее её состояние (переменные из внешней области видимости) на момент своего создания, даже если это состояние потом выходит из области видимости.
Простыми словами:
Это функция внутри другой функции, которая "запоминает" переменные из внешней функции и может использовать их позже, когда внешняя функция уже завершила работу.
Ключевые элементы замыкания:
- Вложенная функция (внутренняя).
- Свободная переменная (переменная из внешней области видимости, которую использует внутренняя функция).
- Возврат внутренней функции из внешней.
Пример создания замыкания
def outer_function(x): # 1. Внешняя функция
def inner_function(y): # 2. Внутренняя функция (замыкание)
return x + y # 3. Использует свободную переменную `x`
return inner_function # 4. Возвращаем внутреннюю функцию
# Создаем замыкание
closure = outer_function(10) # `x` = 10 "запоминается" в замыкании
# Теперь вызываем замыкание
result = closure(5) # = 10 + 5
print(result) # 15
#Пример - Фабрика функций
def multiplier(n):
# Замыкание запоминает множитель `n`
def multiply(x):
return x * n
return multiply
# Создаем специализированные функции
double = multiplier(2)
triple = multiplier(3)
print(double(5)) # 10 (5 * 2)
print(triple(5)) # 15 (5 * 3)Важный нюанс - Изменяемое состояние
Если нужно изменять захваченную переменную, используйте ключевое слово nonlocal:
def counter():
count = 0
def increment():
nonlocal count # Указываем, что count - не локальная переменная
count += 1
return count
return increment
c = counter()
print(c()) # 1
print(c()) # 2 (состояние сохраняется между вызовами)Зачем нужны замыкания?
- Сохранение состояния без использования классов.
- Создание фабрик функций с предустановленными параметрами.
- Реализация декораторов (декораторы в Python — это замыкания).
- Инкапсуляция данных и создание callback-функций.

офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру