2011-03-21 5 views
7

por ejemplo: instrucción de declaración declarará una nueva variable local.Python, ¿cómo puedo cambiar el valor de una variable en el ámbito principal?

foo = 'global' 
def func1(): 
    foo = 'func1' 
    def func2(): 
     foo = 'local variable in func2' 

uso declaración global va a utilizar el foo en mundial:

def func2(): 
    global foo 
    foo = 'global changed in func2' #changed the foo value in global scope 

cómo puedo cambiar la variable foo en el ámbito func1?
Gracias por cualquier ayuda.

Editar:

Gracias Brandon Craig Rodas, por fin entiendo su significado.

Si hay más de 3 ámbitos anidados, puedo almacenar la variable en una lista.

foo = ['global', 'function1', 'function2'] 
def func1(): 
    foo[1] = 'func1' 
    def func2(): 
     foo[2] = 'func2' 
     foo[1] = 'func1 modified in func2' 

Acabo de utilizar una variable global en realidad.


así, si hay dos funciones anidadas, podemos usar

nonlocal foo 

y

global foo 

si hay más de tres funciones anidadas,
y cada uno de las variables de uso de la función en el alcance de otras funciones,
¿por qué no declaramos una variable de lista global?
¡Gracias por toda su ayuda!

Respuesta

8

En Python 3, creo que puede utilizar la palabra clave nonlocal para obtener permiso para modificar una variable en un ámbito no global adjunto. En Python 2, no puede reasignar foo en un ámbito adjunto; en cambio, establecer foo igual a un objeto mutable como una lista [] y luego pegar el valor que desea almacenar en la lista:

def func1(): 
    foo = [None] 
    def func2(): 
     foo[0] = 'Test' 
+0

Gracias, eso realmente ayudó. pero solo en la imaginación, ¿qué tal si anidamos más de 3 funciones? ¿Podría ayudarnos más? Gracias. – netroyal

+0

Gracias. Finalmente entiendo cuál era tu significado. si hay más de dos funciones anidadas, puede usar foo [1, 2, 3] para almacenar cada valor en el elemento foo [0] foo [1] foo [2]. ¡Gracias de nuevo! – netroyal

4

en Python 3.0 y arriba se puede utilizar la palabra clave no local.

Cuestiones relacionadas