以下代码按预期工作:
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)
这篇文章不是关于nonlocalorglobal关键字的。