def foo():
global a
def bar():
nonlocal a
a = 6
bar()
a = 5
foo()
print(a)
Попытка запустить модуль, состоящий из кода, указанного выше, приводит к SyntaxError: no binding for nonlocal 'a' found
.Но я ожидал, что он запустится и напечатает 6
, почему нет?
Обратите внимание, что если мы заменим оператор global a
на оператор, связывающий имя a
(например, from something import otherthing as a
или a = 0
), тогда не будет SyntaxError
, а print(a)
оператор выдает 5
, как и ожидалось.
Я прочитал https://docs.python.org/3/reference/executionmodel.html#naming-and-binding, но не понял, что делают операторы global
и nonlocal
.