Что такое область видимости и как работает nonlocal/global?
1️⃣ Как кратко ответить
Область видимости определяет, где в коде можно использовать переменные. В Python есть четыре уровня области видимости: локальная, вложенная, глобальная и встроенная. Ключевое слово global позволяет изменять глобальные переменные внутри функции, а nonlocal — изменять переменные из внешней, но не глобальной области видимости.
2️⃣ Подробное объяснение темы
Область видимости в программировании — это контекст, в котором определены переменные и в котором они могут быть использованы. В Python существует несколько уровней области видимости, которые определяют, где и как можно использовать переменные.
Уровни области видимости в Python
-
Локальная область видимости (Local Scope):
- Переменные, объявленные внутри функции, доступны только в этой функции.
- Они создаются при вызове функции и уничтожаются после её завершения.
-
Вложенная область видимости (Enclosed Scope):
- Переменные, объявленные в функции, которая вложена в другую функцию.
- Эти переменные доступны в функции, где они объявлены, и во всех вложенных в неё функциях.
-
Глобальная область видимости (Global Scope):
- Переменные, объявленные на уровне модуля, доступны во всём модуле.
- Они создаются при запуске программы и уничтожаются при её завершении.
-
Встроенная область видимости (Built-in Scope):
- Переменные, которые всегда доступны в Python, такие как функции
len(),print(), и т.д.
- Переменные, которые всегда доступны в Python, такие как функции
Ключевые слова global и nonlocal
global
Ключевое слово global используется для указания на то, что переменная находится в глобальной области видимости. Это позволяет изменять глобальные переменные внутри функции.
x = 10 # Глобальная переменная
def modify_global():
global x # Указываем, что будем использовать глобальную переменную x
x = 20 # Изменяем значение глобальной переменной
modify_global()
print(x) # Выведет 20, так как глобальная переменная была изменена
x = 10: Объявление глобальной переменнойx.global x: Указывает, чтоx— это глобальная переменная.x = 20: Изменяет значение глобальной переменнойx.
nonlocal
Ключевое слово nonlocal используется для изменения переменных, которые находятся в области видимости, отличной от локальной и глобальной, то есть в замыкании.
def outer_function():
y = 5 # Переменная в области видимости внешней функции
def inner_function():
nonlocal y # Указываем, что будем использовать переменную из внешней функции
y = 10 # Изменяем значение переменной из внешней функции
inner_function()
print(y) # Выведет 10, так как переменная из внешней функции была изменена
outer_function()
y = 5: Переменнаяyобъявлена в области видимостиouter_function.nonlocal y: Указывает, чтоy— это переменная из внешней функции.y = 10: Изменяет значение переменнойyиз внешней функции.
Зачем это нужно
Понимание областей видимости и использование global и nonlocal позволяет управлять доступом и изменением переменных в разных частях программы. Это важно для предотвращения ошибок, связанных с изменением переменных в неожиданных местах, и для создания более читаемого и поддерживаемого кода.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться