Python использует довольно типичный variable scoping. Нелокальные переменные видны внутри функции.
Вам нужно только ключевое слово global
, если вы хотите назначить переменную в глобальной области видимости. Также вы должны отметить разницу между глобальной и внешней областью. Рассмотрим последствия:
x = 'global'
def f():
x = 'local in f'
def g():
global x
x = 'assigned in g'
g()
print x
После выполнения f()
выше код будет печатать local in f
, а x
в глобальном масштабе устанавливается в 'assigned in g'
.
По состоянию на Python 3, есть также nonlocal
ключевых слов, что позволяет присваивание переменной из внешней области.
x = 'global'
def f():
x = 'local in f'
def g():
nonlocal x
x = 'assigned in g'
return g
print(x)
После выполнения f()
выше кода будет печатать «назначен в г (which is the value of
х in local scope of
п() ), while value of
x` в глобальном масштабе остается нетронутым.
Стоит также отметить, что Python использует лексическую (статическую) область видимости, таким образом, следующий код делает не модификации x
в глобальном масштабе:
x = 'global'
def f():
x = 'local in f'
def g():
nonlocal x
x = 'assigned in g'
return g
g = f()
g()
Какая ошибка? – Marcin
@Marcin, если я добавлю x = 2, ошибка: «UnboundLocalError: локальная переменная« x », на которую ссылаются перед присвоением» –
Затем поместите это в свой вопрос. – Marcin