Область видимости (scope) в Python определяет контекст, в котором имя переменной доступно и может быть использовано. Это своеобразный "контейнер" для переменных, определяющий, где они могут быть найдены и изменены.
В Python существует четыре основных типа областей видимости (LEGB):
print()
, len()
) и констант (например, True
, False
, None
). Эти имена доступны в любой части программы.Порядок поиска переменных определяется правилом LEGB: Python сначала ищет переменную в локальной области видимости, затем в объемлющей функции, затем в глобальной области видимости и, наконец, в встроенной области видимости. Если переменная не найдена ни в одной из этих областей, возникает ошибка NameError
.
Ключевые слова global
и nonlocal
:
global
: Используется для указания, что переменная, используемая внутри функции, является глобальной переменной, определенной вне функции. Это позволяет функции изменять значение глобальной переменной.nonlocal
: Используется для указания, что переменная, используемая внутри вложенной функции, находится в области видимости объемлющей функции, но не является глобальной. Это позволяет вложенной функции изменять значение переменной в объемлющей функции.Пример:
x = 10 # Глобальная переменная
def outer_function():
y = 20 # Переменная в объемлющей функции
def inner_function():
nonlocal y
y = 30 # Изменяем переменную y в объемлющей функции
print("inner:", y) # Вывод: inner: 30
inner_function()
print("outer:", y) # Вывод: outer: 30
outer_function()
print("global:", x) # Вывод: global: 10
Понимание областей видимости очень важно для написания чистого, понятного и предсказуемого кода. Правильное использование областей видимости помогает избежать конфликтов имен и делает код более модульным и поддерживаемым.