Python变量作用域的意外行为

Python变量作用域的意外行为,python,function,variables,scope,Python,Function,Variables,Scope,对于Python的可变范围系统是如何工作的,我有点困惑。假设我有这样的情况: a = 10 def test(): print(a) a = 10 def test(): print(a) a += 1 print(a) 然后一切都如我所料。Python首先查找局部变量a,但找不到,然后搜索全局变量 但是,在这种情况下: a = 10 def test(): print(a) a = 10 def test(): print(a) a

对于Python的可变范围系统是如何工作的,我有点困惑。假设我有这样的情况:

a = 10
def test():
    print(a)
a = 10
def test():
    print(a)
    a += 1
    print(a)
然后一切都如我所料。Python首先查找局部变量a,但找不到,然后搜索全局变量

但是,在这种情况下:

a = 10
def test():
    print(a)
a = 10
def test():
    print(a)
    a += 1
    print(a)

Python抛出一个UnboundLocalError异常,显然是从第3行printa发出的。在我看来,至少这一行没有任何变化,我也不明白为什么会出现异常。

由于python没有变量声明,函数范围内的每个变量赋值都被认为是局部的。因此,您必须始终指定该变量为全局变量:

a = 10
def test():
    global a
    print(a)
    a += 1
    print(a)
test()

请在搜索前正确搜索posting@therealprashant回答这个问题的人说。@vaultah嗯,有时候确实会遇到一些固执的人,他们需要得到回答:@theralprashant他们被愚弄了,这就是认定他们是这样的关键。如果你有更好的答案,把它写在那里,这样所有指向它的傻瓜都会受益。如果没有,坐在你的手上。@Jornsharpe明白了。谢谢你的反馈。我会确保以后不会发生这种情况,建议使用global是个坏主意。