Unexpected behavior of Python's variable scope
本问题已经有最佳答案,请猛点这里访问。
对于Python的变量范围系统是如何工作的,我有点困惑。假设我遇到这样的情况:
1 2 3 | a = 10 def test(): print(a) |
然后一切都如我所料。python首先查找局部变量
但是,在这种情况下:
1 2 3 4 5 | a = 10 def test(): print(a) a += 1 print(a) |
python抛出了一个未绑定的本地错误异常,显然是源于第3行(
由于python没有变量声明,因此函数范围内的每个变量分配都被视为局部变量。因此,必须始终指定该变量是全局变量:
1 2 3 4 5 6 7 | a = 10 def test(): global a print(a) a += 1 print(a) test() |
这是因为当您对一个(应该是全局的)进行一些操作时,Python将其视为本地的。
所以当你做一个+=1的时候,它会搜索局部变量,但它找不到任何变量,因此产生了错误。
如果您试图增加全局A,那么您需要在前面提到一个带有全局关键字的。否则使用其他变量并递增
您还可以查看:unboundLocalError:在赋值python之前引用的局部变量"l"
考虑这个
1 2 3 4 5 6 7 | c = 0 def increment(): print c c += 1 increment() |
如果函数中有一个变量的赋值,则该变量被视为局部变量,因此,行
1 | c += 1 |
将计数器隐式设为increment()的本地计数器。所以print c将搜索局部变量c而不是全局变量c希望现在没问题