我对Python的变量范围系统如何工作有点困惑。说我有这样的情况:
a = 10
def test():
print(a)
然后一切都按照我的预期运作。 Python首先查找局部变量a
,找不到它然后搜索全局变量。
然而,在这种情况下:
a = 10
def test():
print(a)
a += 1
print(a)
Python抛出一个UnboundLocalError异常,显然是源自第3行(print(a)
)。对我来说,似乎至少在这一行没有任何改变,我不明白为什么还有一个例外。
答案 0 :(得分:0)
这是因为当你对a进行某些操作(预计是全局的)时,python会将其视为本地操作。
所以当你执行+ = 1时,它会搜索局部变量,但它找不到任何错误。
如果您尝试增加全局a,那么您需要在此之前提及一个全局关键字。否则使用其他一些变量并将其递增
您还可以查看:UnboundLocalError: local variable 'L' referenced before assignment Python
考虑一下
c = 0
def increment():
print c
c += 1
increment()
如果对函数内部的变量赋值,则该变量被视为局部因此,行
c += 1
隐式地使计数器本地为increment()。 因此print c将搜索局部变量c而不是全局变量c 我希望现在好了
答案 1 :(得分:0)
由于python没有变量声明,因此函数范围内的每个变量赋值都被认为是本地的。因此,您始终必须指定该变量是全局变量:
a = 10
def test():
global a
print(a)
a += 1
print(a)
test()