今天我正在阅读 python 更改日志并遇到 nonlocal 关键字并对其进行了一些实验。我发现了一个令人困惑的情况,即未触发的赋值会改变nonlocal
关键字的行为,请参见下面的示例。
def a():
x = 'a'
def b():
def c():
nonlocal x
x = 'c'
c()
b()
print(x)
a()
>>> python3 test.py
c
def a():
x = 'a'
def b():
def c():
nonlocal x
x = 'c'
c()
if False:
x = 'b'
b()
print(x)
a()
>>> python3 test2.py
a
您可以在 中看到test2.py
,有一个未触发的分配x = 'b'
改变了非本地的行为。
为什么会这样?