def closure():
a = 2
def f():
if a < 5:
print a
return f
closure()()
打印 2,这对我来说很有意义,因为您可以读取封闭变量。
def closure():
a = 2
def f():
if a < 5:
a += 1
print a
return f
closure()()
结果File "closure_problems.py", line 4, in f
if a < 5:
UnboundLocalError: local variable 'a' referenced before assignment
。
这对我来说也很有意义,因为我知道你不能分配给封闭的变量。但奇怪的是,行号指的是if a < 5
而不是看起来应该是实际的违规语句,a += 1
.
和这个
def closure():
a = 2
def f():
if a < 5:
print a
a += 1
return f
closure()()
结果只在File "closure_problems.py", line 4, in f
if a < 5:
UnboundLocalError: local variable 'a' referenced before assignment
. 它甚至不打印2
,我根本不明白。
解释器是否试图解析块中的所有内容(不对其进行评估)以找出我是在谈论本地a
还是全局?