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

Python Middle Без компании
Что такое замыкание
Ответы
**Замыкание (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-функций.