¿Qué es una variable en Python?
Una variable es un nombre que hace referencia a un objeto en la memoria del ordenador. En Python, las variables no tienen tipos fijos. El tipo pertenece al objeto al que la variable hace referencia.
x = 42
x = "ahora es un string"
Variables locales en Python
Definición de variables locales
Una variable local se define dentro de una función y solo es accesible dentro de esa función. Una vez que la función termina su ejecución, la variable local se elimina de la memoria.
def saludar():
nombre = "Python" # variable local
print("Hola,", nombre)
saludar()
# print(nombre) # Error: nombre no está definida
La variable nombre solo existe dentro de la función saludar y no es accesible fuera de ella.
Ventajas de las variables locales
Las variables locales garantizan el aislamiento de los datos y evitan cambios no deseados desde otras partes del programa. Además, liberan memoria automáticamente al finalizar la función.
Variables globales en Python
¿Qué son las variables globales?
Una variable global se declara fuera de todas las funciones y es accesible desde cualquier parte del archivo del programa. Estas variables mantienen su valor durante toda la ejecución del programa.
lenguaje = "Python" # variable global
def mostrar():
print("Idioma:", lenguaje)
mostrar() # Idioma: Python
Problemas al modificar variables globales
Al intentar modificar una variable global dentro de una función, se produce un error:
contador = 0
def incrementar():
contador += 1 # ¡UnboundLocalError!
Python interpreta contador como una variable local debido a la operación de asignación, pero no ha sido definida localmente.
La palabra clave global
Usar global para modificar variables globales
La palabra clave global permite modificar variables globales dentro de funciones:
cuenta = 0
def incrementar():
global cuenta
cuenta += 1
incrementar()
print(cuenta) # 1
Aplicación de global en operaciones matemáticas
total = 0
def sumar(x):
global total
total += x
sumar(10)
sumar(20)
print(total) # 30
¿Cuándo usar global?
La palabra clave global debe usarse con precaución, ya que puede complicar la depuración del programa y hacer que el código sea menos legible.
Ámbito de variables: la regla LEGB
Principio de búsqueda de variables
Python busca las variables siguiendo la regla LEGB en este orden:
- L (Local) — dentro de la función actual
- E (Enclosing) — en funciones anidadas
- G (Global) — a nivel del módulo
- B (Built-in) — nombres incorporados de Python
Ejemplo del funcionamiento de la regla LEGB
x = "global"
def exterior():
x = "enclosing"
def interior():
x = "local"
print(x)
interior()
exterior() # local
Python encuentra la variable x en el ámbito local y usa su valor.
La palabra clave nonlocal
Acceso a variables en funciones anidadas
La palabra clave nonlocal se usa para trabajar con variables de un ámbito externo, pero no global:
def exterior():
cuenta = 0
def interior():
nonlocal cuenta
cuenta += 1
return cuenta
return interior
f = exterior()
print(f()) # 1
print(f()) # 2
Diferencias entre global y nonlocal
La palabra clave global trabaja con variables a nivel de módulo, mientras que nonlocal lo hace con variables de funciones externas dentro del mismo ámbito de anidamiento.