¿Cómo puedo crear o utilizar una variable global en una función?
Si creo una variable global en una función, ¿cómo puedo utilizar esa variable global en otra función? ¿Debo almacenar la variable global en una variable local de la función que necesita su acceso?
Puede utilizar una variable global en otras funciones declarándola como global
en cada función que le asigne:
globvar = 0
def set_globvar_to_one():
global globvar # Needed to modify global copy of globvar
globvar = 1
def print_globvar():
print(globvar) # No need for global declaration to read value of globvar
set_globvar_to_one()
print_globvar() # Prints 1
Imagino que la razón es que, dado que las variables globales son tan peligrosas, Python quiere asegurarse de que realmente sabes que estás jugando con ellas requiriendo explícitamente la palabra clave global
.
Consulta otras respuestas si quieres compartir una variable global entre módulos.
Puede que quieras explorar la noción de namespaces. En Python, el módulo es el lugar natural para los datos globales:
Cada módulo tiene su propia tabla de símbolos privada, que es utilizada como tabla de símbolos global por todas las funciones definidas en el módulo. Así, el autor de un módulo puede usar variables globales en el módulo sin preocuparse de choques accidentales con las variables globales de un usuario. Por otro lado, si sabes lo que estás haciendo puedes tocar las variables globales de un módulo con la misma notación que se utiliza para referirse a sus funciones,
nombredelmódulo.nombredelpunto
.
Un uso específico de global-en-un-módulo se describe aquí - ¿Cómo comparto las variables globales entre módulos?, y para completar el contenido se comparte aquí:
La forma canónica de compartir información entre módulos dentro de un mismo programa es crear un módulo de configuración especial (a menudo llamado config o cfg). Sólo tienes que importar el módulo de configuración en todos los módulos de tu aplicación; el módulo pasa a estar disponible como nombre global. Como sólo hay una instancia de cada módulo, cualquier cambio realizado en el objeto del módulo se refleja en todas partes. Por ejemplo:
Archivo: config.py
x = 0 # Valor por defecto del ajuste de configuración 'x'
Archivo: mod.py
importar config config.x = 1
Archivo: main.py
importar config importar mod imprimir config.x
Si quieres hacer referencia a una variable global en una función, puedes utilizar la palabra clave global para declarar qué variables son globales. No tienes que usarla en todos los casos (como alguien aquí afirma incorrectamente) - si el nombre referenciado en una expresión no se puede encontrar en el ámbito local o en los ámbitos de las funciones en las que se define esta función, se busca entre las variables globales.
Sin embargo, si se asigna a una nueva variable no declarada como global en la función, se declara implícitamente como local, y puede eclipsar cualquier variable global existente con el mismo nombre.
Además, las variables globales son útiles, en contra de algunos fanáticos de la POO que afirman lo contrario - especialmente para los scripts más pequeños, donde la POO es excesiva.