以下代码按预期工作:
def f():
def g():
print(a)
a = 42
return g
f()()
g
从它的关闭加载a
,一切都很好。
现在这个片段可怕地失败了UnboundLocalError
。
def f():
def g():
print(a)
a = 43
a = 42
return g
f()()
看着dis
,第一个代码调用LOAD_CLOSURE
,第二个没有。考虑到这一点,很明显为什么会引发错误。然而问题是这样的:
python如何知道何时从闭包或本地范围中绘制变量?(考虑到print(a)
前面a = 43
的。)
这个决定是在编译时做出的吗?(好吧,看起来像,考虑到print(a)
之前a = 43
)
这篇文章不是关于nonlocal
orglobal
关键字的。