2012-09-30 23 views
20

mi código es el siguiente:Función No Cambio Global Variable

done = False 

def function(): 
    for loop: 
     code 
     if not comply: 
      done = True #let's say that the code enters this if-statement 

while done == False: 
    function() 

Por alguna razón, cuando mi código entra en la sentencia if, que no sale del bucle while después de que se ha hecho con la función().

PERO, si codificaré así:

done = False 

while done == False: 
    for loop: 
    code 
    if not comply: 
     done = True #let's say that the code enters this if-statement 

... que sale del bucle while. ¿Que está pasando aqui?

Me aseguré de que mi código ingrese el enunciado if. Todavía no he ejecutado el depurador porque mi código tiene muchos bucles (una matriz 2D bastante grande) y abandoné la depuración debido a que era muy tedioso. ¿Cómo es que "hecho" no se cambia cuando está en una función?

+0

Lots of Python preguntas variables globales el día de hoy. – icktoofay

+0

¡Gracias chicos! No puedo creer que fuera así de simple, pero definitivamente es un toque diferente que Java/C++ – cYn

Respuesta

30

Su problema es que las funciones crean su propio espacio de nombres, lo que significa que done dentro de la función es diferente de done en el segundo ejemplo. Use global done para usar el primer done en lugar de crear uno nuevo.

def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

Una explicación de cómo utilizar global se puede encontrar here

4
done=False 
def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

es necesario utilizar la palabra clave global para permitir que el intérprete sabe que usted se refiere a la variable global done, de lo contrario va a crea uno diferente que solo se pueda leer en la función.

2

Uso global, sólo entonces se puede modificar una variable global de lo contrario una declaración como done = True dentro de la función declarará una nueva variable local llamada done:

done = False 
def function(): 
    global done 
    for loop: 
     code 
     if not comply: 
      done = True 

Leer más sobre the global statement.

Cuestiones relacionadas