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 に答える