64

可能重复:
在创建它们的函数之外的函数中使用全局变量

我有以下脚本:

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

为什么会这样?

4

2 回答 2

111

它是一个全局变量,所以这样做:

COUNT = 0

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

increment()

print COUNT

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

于 2012-05-08T21:44:01.260 回答
30

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

>>> COUNT = 0
>>> def increment():
...     global COUNT
...     COUNT += 1
... 
>>> increment()
>>> print(COUNT)
1

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

还值得注意的是,CAPITALS它通常是为常量保留的,所以这样命名你的变量是个坏主意。对于正态变量,lowercase_with_underscores是首选。

于 2012-05-08T21:44:40.387 回答