我有这样的东西:
def a():
#do something
foo = 0
def b():
foo += 2
# do something
b()
#do something
a()
但它说
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a()
File "<pyshell#5>", line 7, in a
b()
File "<pyshell#5>", line 5, in b
foo += 2
UnboundLocalError: local variable 'foo' referenced before assignment
如何在不全局的情况下访问foo
?
答案 0 :(得分:3)
在foo
中对b
的赋值使其成为局部变量,与a
中同名的变量无关。使用nonlocal
语句进行更改。
def a():
#do something
foo = 0
def b():
nonlocal foo
foo += 2
# do something
b()
#do something
现在foo
中的b
与foo
中的a
相同。 nonlocal
类似于global
,但使用包含名称foo
的最接近的包围范围,而不是直接跳转到全局范围。