Python разрешает имена переменных, используя правило LEGB, которое определяет порядок поиска по областям видимости:
Когда на переменную ссылаются, Python ищет в каждой области видимости по порядку, пока не найдёт совпадение:
len или printx = "global"
def outer():
x = "enclosing"
def inner():
x = "local"
print(x) # Выведет: "local"
inner()
outer()
Если убрать присваивание local, Python найдёт x в области видимости enclosing и выведет "enclosing".
По умолчанию внутренние области видимости не могут переопределять переменные из внешних областей. Два ключевых слова это разрешают:
global — позволяет переопределить глобальную переменную из функцииnonlocal — позволяет переопределить охватывающую переменную из вложенной функцииПравило LEGB обеспечивает предсказуемое и согласованное разрешение переменных. Понимание его необходимо, чтобы избежать случайного затенения переменных и писать чистый, корректный код на Python.
Ключевое слово nonlocal позволяет вложенной функции изменять переменную, определённую в области охватывающей функции, не влияя на глобальную область видимости.
Новый — ещё не проверен сообществом
Вы