Variable global de Python

def say_boo_twice(): global boo boo = 'Boo!' print boo, boo boo = 'boo boo' say_boo_twice() 

La salida es

¡Abucheo! ¡Abucheo!

No como yo esperaba. Desde que declaré boo como global, ¿por qué la salida no es:

boo boo boo boo

Related of "Variable global de Python"

Has cambiado boo dentro de tu función, ¿por qué no cambiaría? Además, las variables globales son malas.

Porque reasignas justo antes de mano. Comentario fuera boo = 'Boo!' y obtendrá lo que describe.

 def say_boo_twice(): global boo #boo = 'Boo!' print boo, boo boo = 'boo boo' say_boo_twice() 

Además, ese global boo es innecesario, el boo ya está en el scope global. Aquí es donde lo global marca la diferencia.

 def say_boo_twice(): global boo boo = 'Boo!' print boo, boo say_boo_twice() print "outside the function: " + boo #works 

Mientras:

 def say_boo_twice(): #global boo boo = 'Boo!' print boo, boo say_boo_twice() print "outside the function: " + boo # ERROR. boo is only known inside function, not to this scope 

Usted está reasignando boo después de declararlo como global, por lo que el valor es el último que le asignó. Si elimina la línea tres, obtendría la salida que espera.

Esencialmente, reasignas boo cuando llamas a la función.

Compruebe cómo funciona esto con las funciones globals () y locals ().

Antes de dar un ejemplo, quiero que comprenda la diferencia entre las variables globales y locales en python

variable global: esto es específico para el módulo actual

variable local: esto es específico de las funciones o métodos actuales como lo llamamos en Python

¿Qué pasa si tanto la variable local como la actual tienen el mismo nombre boo?

En tal caso, si no define su abucheo variable como global en el mismo método o función, por defecto lo usará como variable local

Llegando a tu código

Ha definido boo como global en su método say_boo_twice () . El problema es cuando intentas inicializar boo = ‘Boo!’ en ese método, en realidad estás sobrescribiendo lo que has inicializado previamente como boo = ‘boo boo’

Prueba este codigo

– No he inicializado el abucheo variable dentro del método say_boo_twice ()

 def say_boo_twice(): global boo print boo, boo boo = 'boo boo' say_boo_twice() 

Todo lo mejor !!! !! !

boo global es global solo dentro del método say_boo_twice y se le ha asignado un valor dentro de este método. Debe comprender el ámbito léxico o el ámbito en el que puede ser global o qué quiere que sea. En este contexto, justo antes de imprimir, se le asignó un valor de ‘¡Boo!’ Y eso es lo que correctamente imprimió.