martes, 9 de junio de 2020

Variables locales y variables globales en Python

Las variables que se crean dentro de una función tienen un alcance local y afectan solo a la función en la que se encuentran definidas.
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))