2012-05-08 17 views
21

Possible Duplicate:
Using global variables in a function other than the one that created themNo se puede incrementar variable global de la función en Python

Tengo el siguiente guión:

COUNT = 0 

def increment(): 
    COUNT = COUNT+1 

increment() 

print COUNT 

sólo quiero incrementa el contador de variable global, pero esto me da el siguiente error:

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 

¿Por qué es así?

+1

El uso de 'global' entre los principiantes suele ser un signo de mal diseño. –

+0

sin usar 'global' no puede modificar el valor de una variable global dentro de una función, solo puede usar su valor dentro de la función. Pero si quiere asignarle un nuevo valor, primero debe usar la palabra clave 'global'. –

+0

Esto debería responder a su pregunta: http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-thehatcreated-them Parece que Python no lo hará cambie el valor global a menos que especifique que es lo que desea hacer. –

Respuesta

36

es una variable global dé su explicación:

COUNT = 0 

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

increment() 

print COUNT 

Las variables globales se puede acceder sin declarar la mundial, pero si se va a cambiar sus valores se requiere la declaración mundial.

+0

Gracias por la solución. Este es mejor ya que he intentado ya usar "count + = 1" solo, pero no estaba funcionando. Esto funcionó para mí. Gracias. – PravinY

17

Esto es porque los globales no sangran en el alcance de su función. Usted tiene que utilizar la instrucción global para forzar esto para la asignación:

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

Tenga en cuenta que el uso de variables globales es realmente una mala idea - que hace que el código difícil de leer y difícil de usar. En cambio, devuelve un valor de tu función y úsala para hacer algo. Si necesita tener acceso a los datos desde un rango de funciones, considere hacer una clase.

También vale la pena señalar que CAPITALS está generalmente reservado para constantes, por lo que es una mala idea nombrar sus variables de esta manera. Para las variables normales, se prefiere lowercase_with_underscores.

Cuestiones relacionadas