web-dev-qa-db-fra.com

Impossible d'incrémenter la variable globale de la fonction dans python

Duplicata possible:
tilisation de variables globales dans une fonction autre que celle qui les a créées

J'ai le script suivant:

COUNT = 0

def increment():
    COUNT = COUNT+1

increment()

print COUNT

Je veux juste incrémenter la variable globale COUNT, mais cela me donne l'erreur suivante:

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

Pourquoi en est-il ainsi?

32
user873286

c'est une variable globale alors faites ceci:

COUNT = 0

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

increment()

print COUNT

Les variables globales sont accessibles sans déclarer global mais si vous allez changer leurs valeurs, la déclaration globale est requise.

57
cobie

C'est parce que les globaux ne saignent pas dans la portée de votre fonction. Vous devez utiliser l'instruction global pour forcer cela pour l'affectation:

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

Notez que l'utilisation de globaux est une très mauvaise idée - cela rend le code difficile à lire et difficile à utiliser. À la place, retournez une valeur de votre fonction et utilisez-la pour faire quelque chose. Si vous avez besoin d'avoir des données accessibles à partir d'une gamme de fonctions, pensez à créer une classe.

Il convient également de noter que CAPITALS est généralement réservé aux constantes, c'est donc une mauvaise idée de nommer vos variables comme ceci. Pour les variables normales, lowercase_with_underscores est préféré.

23
Gareth Latty