Олег Марков
Ключевые слова global и nonlocal в Python
Введение
Иногда при работе с функциями необходимо изменять переменные, которые находятся вне локальной области. В Python для таких случаев применяются ключевые слова global и nonlocal. Они позволяют корректно управлять переменными глобальной и замыкающей областей.
В этой статье мы разберемся, как работают global и nonlocal, какие ограничения существуют и приведем практические примеры их применения.
Если вы хотите глубже изучить управление переменными в Python и их области видимости — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Ключевое слово global
global позволяет функции изменять переменную, определённую на уровне модуля:
counter = 0 # глобальная переменная
def increment():
global counter
counter += 1
increment()
print(counter) # 1Особенности:
- Без
globalвнутри функции создается новая локальная переменная с тем же именем. - Использование
globalупрощает работу с модульными переменными, но злоупотреблять не рекомендуется.
Ключевое слово nonlocal
nonlocal используется для изменения переменной в enclosing области (внешняя функция), когда функция вложенная:
def outer():
count = 0
def inner():
nonlocal count
count += 1
inner()
print(count)
outer() # 1Особенности:
- Работает только с переменными замыкающей функции.
- Не влияет на глобальные переменные.
- Не может использоваться вне функции.
Частые ошибки
- Использование
nonlocalдля глобальных переменных — вызывает SyntaxError. - Пропуск
globalпри попытке изменить глобальную переменную внутри функции. - Shadowing переменных без использования
nonlocalприводит к созданию локальной копии.
Часто задаваемые вопросы
Можно ли использовать
globalиnonlocalодновременно? Да, если функция вложена и есть необходимость изменить как глобальные, так и замыкающие переменные.Что делать, если переменная не существует? При
globalсоздается новая глобальная переменная. Приnonlocalпеременная должна существовать в enclosing области, иначе ошибка.Можно ли изменить встроенные функции через
globalилиnonlocal? Нет, встроенные функции нельзя изменять этим образом.
Заключение
global и nonlocal дают контроль над изменением переменных за пределами локальной функции. Понимание их работы помогает избегать ошибок с областями видимости и позволяет писать более предсказуемый код.
Для системного изучения управления переменными и областями видимости рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

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