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?
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.
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é.