无法从python中的函数递增全局变量

Can not increment global variable from function in python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Using global variables in a function other than the one that created them

我有以下脚本:

1
2
3
4
5
6
7
8
COUNT = 0

def increment():
    COUNT = COUNT+1

increment()

print COUNT

我只想增加全局变量计数,但这会产生以下错误:

1
2
3
4
5
6
Traceback (most recent call last):
  File"test.py", line 6, in <module>
    increment()
  File"test.py", line 4, in increment
    COUNT = COUNT+1
UnboundLocalError: local variable 'COUNT' referenced before assignment

为什么会这样?


它是一个全局变量,因此请执行以下操作:

1
2
3
4
5
6
7
8
9
COUNT = 0

def increment():
    global COUNT
    COUNT = COUNT+1

increment()

print COUNT

可以在不声明全局变量的情况下访问全局变量,但如果要更改它们的值,则需要全局声明。


这是因为全局变量不会进入您的函数范围。您必须使用global语句强制执行以下分配:

1
2
3
4
5
6
7
8
>>> COUNT = 0
>>> def increment():
...     global COUNT
...     COUNT += 1
...
>>> increment()
>>> print(COUNT)
1

请注意,使用全局变量是一个非常糟糕的主意——它使代码难以读取和使用。相反,从函数中返回一个值,并用它来做一些事情。如果需要从一系列函数中访问数据,请考虑创建一个类。

同样值得注意的是,CAPITALS通常是为常量保留的,所以这样命名变量是个坏主意。对于正态变量,最好使用lowercase_with_underscores