Variables globales y locales en Python

En Python, las variables juegan un papel clave en el almacenamiento y gestión de datos. Su comportamiento y accesibilidad dependen de dónde estén definidos en el programa. En este artículo exploraremos las variables globales y locales, cómo funcionan y escenarios comunes con ejemplos.

Variables locales

Las variables locales se crean dentro de una función y existen sólo durante su ejecución. No se puede acceder a ellos desde fuera de la función.

Ejemplo 1: En este código estamos creando y accediendo a una variable local dentro de una función.

Python
   def   greet  ():   msg   =   'Hello from inside the function!'   print  (  msg  )   greet  ()   

Producción
Hello from inside the function!  

Explicación: Nosotros definimos saludar() con una variable local mensaje e imprimirlo. Dado que msg existe solo durante la ejecución de la función, se accede a él dentro de la función. Vocación saludar() muestra el mensaje.

Ejemplo 2 : En este ejemplo, estamos creando una variable local dentro de una función y luego intentamos acceder a ella fuera de la función, lo que provoca un error.

Python
   def   greet  ():   msg   =   'Hello!'   print  (  'Inside function:'     msg  )   greet  ()   print  (  'Outside function:'     msg  )   

Producción

Rastreo (última llamada más reciente):
Archivo '/home/guest/sandbox/Solution.py' línea 6 en
print('Función externa:' mensaje)
NameError: el nombre 'msg' no está definido

Explicación: mensaje es una variable local dentro saludar() y sólo se puede acceder allí. Imprimirlo afuera provoca un error porque no existe globalmente.

Variables globales

Las variables globales se declaran fuera de todas las funciones y se puede acceder a ellas desde cualquier parte del programa, incluidas las funciones internas.

En este ejemplo, estamos creando una variable global y luego accedemos a ella tanto dentro como fuera de una función.

Python
   msg   =   'Python is awesome!'   def   display  ():   print  (  'Inside function:'     msg  )   display  ()   print  (  'Outside function:'     msg  )   

Producción
Inside function: Python is awesome! Outside function: Python is awesome!  

Explicación: mensaje es una variable global accesible tanto dentro como fuera del mostrar() función. Vocación mostrar() imprime el global mensaje e imprimiendo mensaje fuera de la función funciona como se esperaba.

Nota: Si una variable no se encuentra dentro de una función (alcance local), Python la busca automáticamente en el alcance global. Sin embargo, si una variable local tiene el mismo nombre que una global, ocultará la variable global dentro de esa función.

Uso de variables locales y globales.

Si una variable se define tanto global como localmente con el mismo nombre, la variable local oculta la variable global dentro de la función. Los cambios en la variable local no afectan a la variable global a menos que la declare explícitamente como global.

Python
   def   fun  ():   s   =   'Me too.'   print  (  s  )   s   =   'I love Geeksforgeeks'   fun  ()   print  (  s  )   

Producción
Me too. I love Geeksforgeeks  

Explicación: Adentro divertido() s es una variable local establecida en 'Yo también'. e imprime ese valor. Fuera de lo global s sigue siendo 'Me encanta Geeksforgeeks', por lo que imprimir s luego muestra el valor global.

Modificar variables globales dentro de una función

Por defecto no se puede modificar una variable global dentro de una función sin declararla como global. Si prueba Python, generará un error porque trata la variable como local. Para modificar una variable global utilice el palabra clave global .

Sin global (provoca error)

Python
   def   fun  ():   s   +=   ' GFG'   # Error: Python thinks s is local   print  (  s  )   s   =   'I love GeeksforGeeks'   fun  ()   

Producción

UnboundLocalError: variables locales a las que se hace referencia antes de la asignación

Explicación: Dentro de fun() Python asume que s es local ya que intentamos modificarlo. Pero no existe ningún s local antes de esa línea, por lo que se produce un error.

Con global (funciona correctamente)

Python
   s   =   'Python is great!'   def   fun  ():   global   s   s   +=   ' GFG'   # Modify global variable   print  (  s  )   s   =   'Look for GeeksforGeeks Python Section'   # Reassign global   print  (  s  )   fun  ()   print  (  s  )   

Producción
Python is great! GFG Look for GeeksforGeeks Python Section Look for GeeksforGeeks Python Section  

Explicación:

  • Declarar s como global le dice a Python que use la variable del alcance global.
  • La función primero agrega 'GFG' y luego reasigna s.
  • Los cambios persisten fuera de la función.

Global versus local con el mismo nombre

Python
   a   =   1   # Global variable   def   f  ():   print  (  'f():'     a  )   # Uses global a   def   g  ():   a   =   2   # Local shadows global   print  (  'g():'     a  )   def   h  ():   global   a   a   =   3   # Modifies global a   print  (  'h():'     a  )   print  (  'global:'     a  )   f  ()   print  (  'global:'     a  )   g  ()   print  (  'global:'     a  )   h  ()   print  (  'global:'     a  )   

Producción
global: 1 f(): 1 global: 1 g(): 2 global: 1 h(): 3 global: 3  

Explicación:

  • f() imprime global a sin cambiarlo.
  • g() crea un local y deja el global intacto.
  • h() declara a como global y lo modifica.

Variable local versus variable global

Base de comparación Variables globales variables locales
Definición Declarado fuera de las funciones Declarado dentro de una función.
Vida Creado cuando se inicia el programa y destruido cuando finaliza Creado cuando se llama a la función y destruido cuando regresa
Compartir datos Compartido en todas las funciones No compartido; existe sólo dentro de su función
Alcance Se puede acceder desde cualquier parte del programa. Accesible sólo dentro de la función.
Parámetros necesarios No es necesario pasar parámetros Puede crearse a través de parámetros o asignaciones dentro de la función.
Almacenamiento Gestionado en el espacio de nombres global (ubicación de memoria no fija) Almacenado en el espacio de nombres local de la función (marco de pila)
Valor Los cambios afectan a todo el programa. Los cambios son locales y no afectan otras funciones.