Las variables que se definen fuera de las funciones tienen un alcance global y pueden usarse dentro y fuera de las funciones.
Cuando se usan funciones dentro de funciones podemos tener diferentes niveles. En estos casos cuando se define una variable dentro de una función ésta es válida para su función y todas las demás que se encuentren en niveles inferiores.
caso1.py
Definimos dos variables globales y luego las usamos dentro de una función. Las variables que se definen en el programa principal son globales y actúan en todo el código. nombre="Álvaro" #variable global
ciudad="Madrid" #variable global
def historial():
print("Nuestro amigo {} nació en {}.".format(nombre,ciudad))
historial()
caso2.py
Definimos una variable global (ciudad) y dentro de la función historial definimos dos variables locales, una de ellas con el mismo nombre que la global anteriormente definida (ciudad). En este caso dentro de la función la variable ciudad tomará el valor local (Madrid) pero después al salir del ámbito de la función y regresar al programa principal la variable local ciudad habrá desaparecido y su valor volverá a ser el que se asignó de forma global. ciudad="Santander" #variable global
def historial():
nombre="Álvaro" #variable local
ciudad="Madrid" #variable local
print("Nuestro amigo {} nació en {}.".format(nombre,ciudad))
historial()
print(f"Me gusta ir a {ciudad}")
Observe que el último print es una forma alternativa para imprimir con formato.caso3.py
Otro ejemplo con la variable ciudad que está definida dos veces una con ámbito global y otra con ámbito local. def historial():
ciudad="Londres" #variable local
print("Nuestro amigo {} vive en {}.".format(nombre,ciudad))
nombre="Álvaro" #variable global
ciudad="Madrid" #variable global
historial()
print(f"Nuestro amigo {nombre} nació en {ciudad}.")
caso4.py
La variable x es de ámbito global y la variable y es de ámbito local. x="azul" #variable global
def mifuncion():
print("Me gusta el color",x,"\n")
def otrafuncion():
y="verde" #variable local
print("Me gusta el color ",y,"\n")
mifuncion()
otrafuncion()
#si ejecutaramos la siguiente línea provocaría un error
#print("Mis colores favoritos son {} y {}".format(x,y))
La última línea está comentada ya que si la ejecutáramos se provocaría un error. El motivo es que la variable y únicamente tiene ámbito local y al usarla fuera de la función aparece como desconocida.caso5.py
Una forma de solucionar el error que se provocaría en el programa del caso anterior consiste en convertir la variable y en una variable global, indicándolo con el comando:
global y
x="azul" #variable global
def mifuncion():
print("Me gusta el color",x,"\n")
def otrafuncion():
global y #convertimos la variable y en global
y="verde" #variable global
print("Me gusta el color ",y,"\n")
mifuncion()
otrafuncion()
print("Mis colores favoritos son {} y {}".format(x,y))