Entendiendo variables globales, locales y nonlocal en Python
Entendiendo variables globales, locales y nonlocal en Python
Domine el uso de variables globales, locales y nonlocal en Python, y sepa cuándo aplicar cada una para código limpio y mantenible.
Video: Variables locales y globales en Python
Variables globales
En Python, una variable declarada fuera de cualquier función—a nivel de módulo—es una variable global. Puede leerse desde cualquier parte del módulo, pero debe declararse con la palabra clave global si desea modificarla dentro de una función.
Ejemplo: crear y leer una variable global
x = "global"
def foo():
print("x dentro:", x)
foo()
print("x fuera:", x)
Salida
x dentro: global x fuera: global
Intentar reasignar x sin declararla global resulta en UnboundLocalError:
x = "global"
def foo():
x = x * 2
print(x)
foo()
Salida
UnboundLocalError: local variable 'x' referenced before assignment
Para modificar una variable global dentro de una función, use la palabra clave global:
x = "global"
def foo():
global x
x = x * 2
print(x)
foo()
Salida
globalglobal
Variables locales
Una variable local se define dentro del cuerpo de una función y existe solo durante la ejecución de esa función. No puede accederse fuera de la función.
Ejemplo: acceder a variable local fuera de su ámbito
def foo():
y = "local"
foo()
print(y)
Salida
NameError: name 'y' is not defined
Definir y usar una variable local correctamente:
def foo():
y = "local"
print(y)
foo()
Salida
local
Combinando variables globales y locales
Es común usar ambos ámbitos en el mismo módulo. La palabra clave global asegura que una variable se refiera a la instancia a nivel de módulo.
x = "global "
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
Salida
global global local
Cuando una variable local comparte nombre con una global, son independientes:
x = 5
def foo():
x = 10
print("x local:", x)
foo()
print("x global:", x)
Salida
x local: 10 x global: 5
Variables nonlocal
Las funciones anidadas pueden acceder y modificar variables de su ámbito envolvente (pero no global) usando la palabra clave nonlocal.
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
outer()
Salida
inner: nonlocal outer: nonlocal
Nota: Actualizar una variable nonlocal dentro de la función interna actualiza la variable en el ámbito de la función externa.
python
- Variables, constantes y literales en C: guía completa
- Palabras clave e identificadores en Python: Dominando palabras reservadas y convenciones de nomenclatura
- Sentencias, indentación y comentarios en Python: Guía clara
- Variables, constantes y literales en Python – Guía completa
- Dominando conversión y casting de tipos en Python: Guía completa
- Dominando E/S e importación de módulos en Python: Guía práctica
- Dominando la palabra clave global en Python: Cómo y cuándo usarla
- Dominando Números, Conversión de Tipos y Matemáticas en Python
- Dominando Operaciones de Directorios y Archivos en Python
- Dominando Errores y Excepciones Integradas en Python
- Entendiendo type() e isinstance() en Python: ejemplos prácticos