Introducción a las Variables Globales y Locales en Python
Publicado: 2021-08-26Python maneja las variables de una manera muy inconformista. Mientras que muchos lenguajes de programación consideran las variables como globales por defecto (a menos que se declaren como locales), Python considera las variables como locales a menos que se declaren al revés. La razón principal por la que Python considera las variables como locales de forma predeterminada es que el uso de variables globales generalmente se considera una mala práctica de codificación.
Entonces, al programar en Python, cuando la definición de variables ocurre dentro de una función, son locales por defecto. Cualquier modificación o manipulación que realice a esta variable dentro del cuerpo de la función permanecerá solo dentro del alcance de esta función. O, en otras palabras, esos cambios no se verán reflejados en ninguna otra variable fuera de la función, incluso si la variable tiene el mismo nombre que la variable de la función. Todas las variables existen en el ámbito de la función en la que están definidas y mantienen ese valor. Para obtener experiencia práctica en variables y proyectos de Python, pruebe nuestras certificaciones de ciencia de datos de las mejores universidades de EE. UU.
A través de este artículo, exploremos la noción de variables locales y globales en Python, además de cómo definir variables globales. También veremos algo conocido como "variables no locales".
¡Sigue leyendo!
Tabla de contenido
Variables globales y locales en Python
Veamos un ejemplo para comprender cómo se pueden usar los valores globales dentro del cuerpo de una función en Python:
Programa:
función de definición ():
imprimir (cadena)
cadena = "¡Me encanta Python!"
función()
Producción
¡Me encanta Pitón!
Como puede ver, a la cadena variable se le asigna el valor "¡Me encanta Python!" antes de llamar a func(). El cuerpo de la función consiste solo en la declaración de impresión. Como no hay asignación a la variable de cadena dentro del cuerpo de la función, tomará el valor de la variable global en su lugar.
Como resultado, la salida será cualquiera que sea el valor global de la cadena variable, que en este caso es "¡Me encanta Python!".
Ahora, cambiemos el valor de string dentro de func() y veamos cómo afecta a las variables globales:
Programa:
función de definición ():
cadena = "¡Me encanta Java!"
imprimir (cadena)
cadena = "¡Me encanta Python!"
función()
imprimir (cadena)
Producción:
¡Me encanta Java!
¡Me encanta Pitón!
En el programa anterior, hemos definido una función func(), y dentro de ella, tenemos una cadena variable con el valor "¡Me encanta Java!". Entonces, esta variable es local a la función func(). Luego, tenemos la variable global como antes, y luego llamamos a la función y la declaración de impresión. Primero, se activa la función, llamando a la declaración de impresión de esa función y entregando el resultado "¡Me encanta Java!" – que es la variable local para esa función. Luego, una vez que el programa está fuera del alcance de la función, el valor de s cambia a "Me encanta Python", y es por eso que obtenemos ambas líneas como salida.
Ahora, agreguemos los dos primeros ejemplos e intentemos acceder a la cadena usando la declaración de impresión, y luego intentemos asignarle un nuevo valor. Esencialmente, estamos tratando de crear una cadena como variable local y global.
Afortunadamente, Python no permite esta confusión y arroja un error. Así es cómo:
Programa:
función de definición ():
imprimir (cadena)
cadena = "¡Me encanta Java!"
imprimir (cadena)
cadena = "¡Me encanta Python!"
función()
Salida (Error):
——————————————————————————
UnboundLocalError Traceback (última llamada más reciente)
<ipython-input-3-d7a23bc83c27> en <módulo>
5
6 cuerdas = "¡Me encanta Python!"
—-> 7 función()
<ipython-input-3-d7a23bc83c27> en func()
1 función de definición ():
—-> 2 imprimir(cadena)
3 cuerdas = "¡Me encanta Java!"
4 imprimir (cadena)
5
UnboundLocalError: variable local 's' referenciada antes de la asignación
Evidentemente, Python no permite que una variable sea tanto global como local dentro de una función. Entonces, nos da una variable local ya que asignamos un valor a la cadena dentro de la func(). Como resultado, la primera declaración de impresión muestra la notificación de error. Todas las variables creadas o cambiadas dentro del alcance de cualquier función son locales a menos que hayan sido declaradas como “globales” explícitamente.
Definición de variables globales en Python
La palabra clave global es necesaria para informar a Python que estamos accediendo a variables globales. Así es cómo:
Programa:
función de definición ():
cadena global
imprimir (cadena)
string = "¡Pero también quiero aprender Python!"
imprimir (cadena)
string = "¡Estoy buscando aprender Java!"
función()
imprimir (cadena)
Producción:
¡Estoy buscando aprender Java!
¡Pero también quiero aprender Python!
¡Pero también quiero aprender Python!
Como puede ver en la salida, Python reconoce las variables globales aquí y evalúa la declaración de impresión en consecuencia, dando la salida adecuada.
Uso de variables globales en funciones anidadas
Ahora, examinemos qué sucederá si se usan variables globales en funciones anidadas. Consulte este ejemplo en el que la variable 'idioma' se define y utiliza en varios ámbitos:
Programa:
función de definición ():
idioma = “inglés”
def func1():
lenguaje global
idioma = “español”
print(“Antes de llamar a func1: ” + idioma)
print(“Llamando a func1 ahora:”)
función1()
print(“Después de llamar a func1: ” + idioma)
función()
print(“Valor del idioma en principal: ” + idioma)
Producción:
Antes de llamar a func1: inglés
Llamando a func1 ahora:
Después de llamar a func1: inglés
Valor de idioma en principal: Español
Como puede ver, la palabra clave global, cuando se usa dentro de la func1 anidada, no tiene impacto en la variable 'idioma' de la función principal. Es decir, el valor se conserva como "inglés". Esto también muestra que después de llamar a func(), existe una variable 'idioma' en el espacio de nombres del módulo con un valor 'español'.
Este hallazgo también es consistente con lo que descubrimos en la sección anterior: que una variable, cuando se define dentro del cuerpo de una función, siempre es local a menos que se especifique lo contrario. Sin embargo, también debe haber un mecanismo para acceder a las variables que pertenecen a otros ámbitos diferentes.
¡Ahí es donde entran las variables no locales!
Variables no locales
Las variables no locales son nuevos tipos de variables introducidas por Python3. Estos tienen mucho en común con las variables globales y también son extremadamente importantes. Sin embargo, una diferencia entre las variables no locales y globales es que las variables no locales no permiten cambiar las variables del alcance del módulo.
Mira los siguientes ejemplos para entender esto:
Programa:
función de definición ():
lenguaje global
imprimir (idioma)
idioma = “alemán”
función()
Producción:
alemán
Como era de esperar, el programa devuelve 'Frankfurt' como salida. Ahora, cambiemos 'global' a 'nonlocal' y veamos qué sucede:
Programa:
función de definición ():
idioma no local
imprimir (idioma)
idioma = “alemán”
función()
Producción:
Archivo “<ipython-input-9-97bb311dfb80>”, línea 2
idioma no local
^
SyntaxError: no se encontró ningún enlace para el 'idioma' no local
Como puede ver, el programa anterior arroja un error de sintaxis. Podemos comprender de aquí que las asignaciones no locales solo se pueden realizar a partir de la definición de funciones anidadas. Las variables no locales deben definirse dentro del alcance de la función, y si no es así, tampoco puede encontrar su definición en el alcance anidado. Ahora, echa un vistazo al siguiente programa:
Programa:
función de definición ():
idioma = “inglés”
def func1():
idioma no local
idioma = “alemán”
print(“Antes de llamar a func1: ” + idioma)
print(“Llamando a func1 ahora:”)
función1()
print(“Después de llamar a func1: ” + idioma)
idioma = “español”
función()
print(“'idioma' en principal: ” + idioma)
Producción:
Antes de llamar a func1: inglés
Llamando a func1 ahora:
Después de llamar a func1: alemán
'idioma' en principal: español
El programa anterior funciona porque la variable 'idioma' se definió antes de llamar a func1(). Si no está definido, obtendremos un error como el siguiente:
Programa:
función de definición ():
#idioma = “inglés”
def func1():
idioma no local
idioma = “alemán”
print(“Antes de llamar a func1: ” + idioma)
print(“Llamando a func1 ahora:”)
función1()
print(“Después de llamar a func1: ” + idioma)
idioma = “español”
función()
print(“'idioma' en principal: ” + idioma)
Producción:
Archivo “<ipython-input-11-5417be93b6a6>”, línea 4
idioma no local
^
SyntaxError: no se encontró ningún enlace para el 'idioma' no local
Sin embargo, el programa funcionará bien si reemplazamos nonlocal con global:
Programa:
función de definición ():
#idioma = “inglés”
def func1():
lenguaje global
idioma = “alemán”
print(“Antes de llamar a func1`: ” + idioma)
print(“Llamando a func1 ahora:”)
función1()
print(“Después de llamar a func1: ” + idioma)
idioma = “español”
función()
print(“'idioma' en principal: ” + idioma)
Producción:
Antes de llamar a func1: inglés
Llamando a func1 ahora:
Después de llamar a func1: alemán
'idioma' en principal: alemán
Si nota, el valor de la variable global (idioma) también se cambia en el programa anterior. ¡Ese es el poder que traen consigo las variables no locales!
En conclusión
En este artículo, discutimos las variables locales, globales y no locales en Python, junto con diferentes casos de uso y posibles errores que debe tener en cuenta. Con este conocimiento a su lado, puede continuar y comenzar a practicar con diferentes tipos de variables y notar las sutiles diferencias.
Python es un lenguaje de programación extremadamente popular en todo el mundo, especialmente cuando se trata de resolver problemas y desafíos relacionados con los datos. En upGrad, tenemos una base de estudiantes en más de 85 países, con más de 40 000 estudiantes pagos en todo el mundo, y nuestros programas han impactado a más de 500 000 profesionales en activo. Nuestros cursos de ciencia de datos y aprendizaje automático han sido diseñados para ayudar a los estudiantes motivados de cualquier origen a comenzar su viaje y sobresalir en el campo de la ciencia de datos. Nuestra asistencia profesional de 360 grados garantiza que una vez que se inscriba con nosotros, su carrera solo avance. ¡Comuníquese con nosotros hoy y experimente el poder del aprendizaje entre pares y la creación de redes globales!
Según su alcance, las variables en Python son locales, globales o no locales. Sí, se puede acceder a las variables globales desde una función en Python. Las variables globales tienen como ámbito todo el programa, mientras que las variables locales sólo tienen como ámbito la función en la que están definidas.¿Cuáles son los tipos de variables en Python?
¿Se puede acceder a las variables globales en Python desde dentro de una función?
¿Cuál es la diferencia entre variables locales y globales?