可能重复:
Using global variables in a function other than the one that created them
我有以下脚本:
COUNT = 0
def increment():
COUNT = COUNT+1
increment()
print COUNT
我只想增加全局变量COUNT,但这会给我以下错误:
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
为什么会这样?
答案 0 :(得分:53)
它是一个全局变量,所以这样做:
COUNT = 0
def increment():
global COUNT
COUNT = COUNT+1
increment()
print COUNT
可以在不声明全局的情况下访问全局变量,但如果要更改其值,则需要全局声明。
答案 1 :(得分:22)
这是因为全局变量不会渗透到函数的范围内。您必须使用global
语句强制执行此操作:
>>> COUNT = 0
>>> def increment():
... global COUNT
... COUNT += 1
...
>>> increment()
>>> print(COUNT)
1
请注意,使用全局变量是一个非常糟糕的主意 - 它使代码难以阅读,并且难以使用。相反,从函数返回一个值并使用它来做某事。如果您需要从一系列函数中访问数据,请考虑创建一个类。
值得注意的是CAPITALS
通常是为常量保留的,所以将这些变量命名为这样是一个坏主意。对于普通变量,首选lowercase_with_underscores
。