Tiempo de vida y alcance de variables en Python

Clase 40 de 63Curso de Python

Contenido del curso

Fundamentos de Programación y Python

Programación Orientada a Objetos en Python

Conceptos avanzados de Python

Métodos y estructura de clases en Python

Resumen

Comprender cómo se comporta una variable según el lugar donde se define es fundamental para escribir código limpio y libre de errores en Python. El alcance (scope) de una variable determina desde qué partes del programa puedes leer o modificar su valor, y dominarlo te evitará bugs difíciles de rastrear.

¿Qué diferencia hay entre una variable local y una variable global?

Una variable local es aquella que se crea dentro de una función y solo existe mientras esa función se ejecuta [0:30]. Al intentar acceder a ella fuera del cuerpo de la función, Python lanza un error indicando que la variable no está definida [1:25].

python def mi_funcion(): x = 10 # variable local print(f"El valor de la variable es {x}")

mi_funcion() print(x) # NameError: name 'x' is not defined

Una variable global, en cambio, se declara en el primer nivel de indentación del archivo. Esto significa que cualquier función puede leer su valor sin necesidad de recibirlo como parámetro [2:15].

python x = 100 # variable global

def mostrar_global(): print(f"El valor de la variable global es {x}")

mostrar_global() print(x) # 100

La clave está en la indentación: el nivel en el que defines una variable determina su persistencia y visibilidad dentro del código.

¿Qué sucede cuando una función contiene otra función?

Python permite definir una función dentro de otra, lo que se conoce como inner function o función interna [3:30]. Al hacerlo, cada nivel de anidación puede tener su propia versión de la misma variable, y el valor que se imprime depende del alcance en el que te encuentres.

python x = "global"

def funcion_externa(): x = "encapsulada"

def funcion_interna(): x = "local" print(x) # local funcion_interna() print(x) # encapsulada

funcion_externa() print(x) # global

Al ejecutar este código [5:10]:

  • Primero se imprime local, porque la función interna asigna su propio valor.
  • Después se imprime encapsulada, ya que al salir de la función interna se recupera el valor del nivel intermedio.
  • Finalmente se imprime global, el valor que persiste en todo el archivo.

Este comportamiento demuestra que cada nivel de indentación crea su propio espacio de nombres.

¿Cómo modificar una variable global o encapsulada desde una función?

¿Para qué sirve la palabra reservada global?

Cuando necesitas que una función no solo lea, sino que modifique el valor de una variable global, debes declararla explícitamente con la palabra reservada global [6:05].

python x = 5 # variable global

def cambiar_valor(): global x x = x + 3 print(f"Valor modificado: {x}")

cambiar_valor() # Valor modificado: 8 print(x) # 8

Sin la instrucción global x, Python crearía una variable local nueva en lugar de alterar la original. Al usarla, el cambio se refleja tanto dentro como fuera de la función [7:00].

¿Cuándo se utiliza nonlocal?

Existe un escenario intermedio: una variable que no es local ni global, sino que pertenece a una función envolvente. Para modificarla desde la función interna se emplea la palabra reservada nonlocal [7:50].

python def funcion_envolvente(): x = "encapsulada"

def funcion_interna(): nonlocal x x = "valor modificado" print(f"El valor en inner es {x}") funcion_interna() print(f"El valor afuera es {x}")

funcion_envolvente()

Al ejecutar [9:10]:

  • Dentro de la función interna, x cambia a "valor modificado".
  • Al salir al cuerpo de la función envolvente, el valor ya fue actualizado gracias a nonlocal.

Esto resulta útil cuando trabajas con closures o patrones donde funciones anidadas necesitan compartir estado sin recurrir a variables globales.

¿Cómo practicar estos conceptos?

Se propone un reto [10:10]: crear dos funciones que trabajen con un diccionario de empleados con las claves nombre, edad y salario.

  • La primera función recibe la información del diccionario.
  • La segunda analiza el salario y filtra empleados que superen cierto monto.
  • Debes aplicar correctamente variables locales y globales para gestionar los datos.

Prueba distintas combinaciones de global y nonlocal para ver cómo cambia el comportamiento del programa y comparte tu solución en los comentarios.

      Tiempo de vida y alcance de variables en Python