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