global
и nonlocal
для одной и той же переменной невозможно и приведет к SyntaxError
. Python не позволяет одновременно объявлять переменную как глобальную и нелокальную в одной и той же области видимости.
Использовать global
и nonlocal
одновременно для одной и той же переменной в Python невозможно. Это вызовет синтаксическую ошибку (SyntaxError
).
Почему это так?
global
используется для указания, что переменная, которая используется внутри функции, относится к глобальной области видимости (то есть объявлена вне всех функций, на уровне модуля).
nonlocal
используется для указания, что переменная, которая используется внутри вложенной функции, относится к области видимости внешней (неглобальной) функции.
Эти ключевые слова служат для разных целей и относятся к разным областям видимости. Одна переменная не может одновременно быть и глобальной, и локальной для внешней функции. Python рассматривает попытку такого объявления как неоднозначность и предотвращает это, генерируя ошибку.
Пример:
def outer_function():
x = 10
def inner_function():
# Попытка одновременно объявить x global и nonlocal приведет к ошибке
# global x
# nonlocal x
# SyntaxError: name 'x' is nonlocal and global
x = 20
print("inner:", x)
inner_function()
print("outer:", x)
outer_function()
Если раскомментировать строки global x
или nonlocal x
в приведенном выше примере, Python выдаст SyntaxError: name 'x' is nonlocal and global
. В зависимости от того, что необходимо сделать, нужно выбрать либо global
, либо nonlocal
, либо не использовать ни одно из них, а передавать переменную как аргумент функции.