2009-08-07 17 views
7
x=True 
def stupid(): 
    x=False 
stupid() 
print x 
+0

bien de seguimiento, ¿cómo hacer referencia a que el exterior x ? –

+0

wow, alguien respondió eso antes de que lo pidiera :) –

+0

Ahora reemplace 'x = True' con' x = [1] ', y reemplace' x = False' con 'x [0] = 2' y vuelva a ejecutar su código .. –

Respuesta

18

No necesita declarar una variable de función local en Python. La "x = False" se refiere a una x local a stupid(). Si realmente desea modificar los x globales dentro estúpida:

def stupid(): 
    global x 
    x=False 
+8

Tenga en cuenta que si hacía 'print x' dentro de la función, usaría la' x' global. Solo la * asignación * crea la nueva variable local. – quark

2

La x en la función estúpida() es una variable local, por lo que tienes 2 x variables con nombre.

6

Porque el alcance de x es local a la función stupid(). una vez que llama a la función, y termina, está fuera de su alcance, e imprime el valor de "x" que está definido fuera de la función estúpida() - y, la x que está definida dentro de de la función estúpida() no existe en la pila más (una vez que se acaba la función)

edición después de su comentario:

el exterior x es referenciado cuando se imprimió, igual que lo hizo.

interior x solo se puede hacer referencia mientras su dentro de la función estúpida(). para que pueda imprimir dentro de esa función para que pueda ver qué valor tiene la x dentro de ella.

Acerca de "global"

  • funciona & responde a la pregunta, al parecer
  • no
  • una buena idea utilizar muy a menudo
  • cuestiones
  • causas de legibilidad y escalabilidad (y potencialmente más)
  • dependiendo de su proyecto, es posible que desee reconsiderar el uso de una variable global definida dentro de una función local.
2

Agregue "global x" antes x = Falso en la función y se imprimirá Verdadero. De lo contrario, hay dos "x", cada una en un ámbito diferente.

10

Para responder a su pregunta siguiente, utilice global:

x=True 
def stupid(): 
    global x 
    x=False 
stupid() 
print x 
+1

jaja buena respuesta preventiva. – Triptych

3

Si desea acceder a la variable global x de un método en el pitón, que tiene que hacer de manera explícita:

x=True 
def stupid(): 
    global x 
    x=False 

stupid() 
print x 
+0

Hipo raro allí. :( – Stobor

2
  • Dado que está realizando una asignación a x dentro de stupid(), Python crea una nueva x dentro de stupid().
  • Si fuera solamente lectura de x dentro stupid(), Python sería, de hecho, utilizan el x mundial, que es lo que quería.
  • Para forzar a Python a usar el global x, agregue global x como la primera línea dentro de stupid().
5

Si ese código es todo dentro de una función, sin embargo, global no va a funcionar, porque entonces no habría x una variable global. En Python 3.x, introdujeron la palabra clave nonlocal, lo que haría que el código funcione independientemente de si se está en el nivel superior o dentro de una función:

x=True 
def stupid(): 
    nonlocal x 
    x=False 
stupid() 
print x 
Cuestiones relacionadas