Олег Марков
Что такое замыкания в Python
Введение
Замыкания (closures) в Python позволяют функции «запомнить» значения переменных из внешней функции, даже после того как она завершила работу. Это мощный инструмент для организации кода, управления состоянием и создания гибких интерфейсов.
В этой статье мы разберём, как создаются замыкания, где они применяются и на что обратить внимание при работе с ними.
Если вы хотите глубже освоить работу с функциями, областями видимости и замыканиями — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Определение замыкания
Замыкание — это функция, которая:
- Определена внутри другой функции.
- Ссылается на переменные внешней функции.
- Сохраняет доступ к этим переменным даже после завершения внешней функции.
Пример замыкания
def outer(x):
def inner(y):
return x + y
return inner
add_five = outer(5)
print(add_five(10)) # 15Здесь inner — замыкание, оно «помнит» значение x из outer.
Применение замыканий
- Создание функций с параметрами по умолчанию.
- Организация скрытого состояния без использования глобальных переменных.
- Декораторы и фабрики функций.
Пример скрытого состояния
def counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
c = counter()
print(c()) # 1
print(c()) # 2Функция increment «запоминает» состояние count.
Частые ошибки
- Попытка изменить переменную внешней функции без
nonlocal. - Ошибочное понимание того, что замыкание создается для каждой функции отдельно.
- Shadowing переменных внутри замыкания.
Часто задаваемые вопросы
Можно ли использовать замыкания для глобальных переменных? Замыкания работают с переменными enclosing области, а не глобальными.
Отличие замыкания от обычной вложенной функции? Замыкание сохраняет доступ к внешней переменной после завершения внешней функции, обычная вложенная функция этого не делает.
Как проверить, что функция является замыканием? Функция с ненулевым
__closure__— это замыкание:
print(add_five.__closure__) # (<cell at 0x...: int object at 0x...>,)Заключение
Замыкания позволяют эффективно управлять состоянием и создавать гибкие конструкции без использования глобальных переменных. Они широко применяются в декораторах, фабриках функций и при организации внутреннего состояния функций.
Для системного изучения замыканий и работы с функциями рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев