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
还是全局?
答案 0 :(得分:2)
在函数中分配a
会使a
成为f()
函数的局部变量。但是在分配之前你不能使用它,这就是你在if a < 5
语句中出错的原因。
解释器是否试图解析块中的所有内容(不进行评估),以便找出我是在谈论本地的还是全局的?
是
或者,没有尝试,只有这样做。