【发布时间】:2013-09-08 02:13:56
【问题描述】:
在python中,我可以写:
def func():
x = 1
print x
x+=1
def _func():
print x
return _func
test = func()
test()
当我运行它时,输出是:
1
2
因为 _func 可以访问 func 中定义的“x”变量。对……
但如果我这样做:
def func():
x = 1
print x
def _func():
x+=1
print x
return _func
test = func()
test()
然后我收到一条错误消息:UnboundLocalError: local variable 'x' referenced before assignment
在这种情况下,_func 似乎无法“看到”“x”变量
问题是:为什么第一个例子中的 print x 会“看到”“x”变量,而数学运算符 x+=1 会抛出异常?
我不明白为什么......
【问题讨论】:
-
这就是为什么 python 3 添加了
nonlocal -
我通常使用对象来存储上下文,因为您可以在闭包内修改对象的属性。例如:
x = {'val': 0}然后x['val'] += 1在_func内。 -
还有一个有趣的question。
-
这是许多其他问题的重复,例如this one 和 this one。在此站点上搜索
UnboundLocalError会为您指出答案。 “python UnboundLocalError”的first google result 也详细解释了发生的情况。请在下次提问之前做一些研究......
标签: python