Conceptos básicos del alcance de las variables
Comprender el alcance de las variables en Python
En Python, el alcance de una variable determina la accesibilidad y la duración de una variable dentro de diferentes partes de un programa. Comprender el alcance de las variables es crucial para prevenir errores de variables no definidas y escribir código limpio y eficiente.
Tipos de alcance de variables
Python tiene principalmente tres tipos de alcance de variables:
1. Alcance local
Las variables definidas dentro de una función tienen alcance local y solo son accesibles dentro de esa función.
def example_function():
local_var = 10 ## Local variable
print(local_var) ## Accessible here
example_function()
## print(local_var) ## This would raise an NameError
2. Alcance global
Las variables definidas fuera de cualquier función tienen alcance global y se pueden acceder en todo el script.
global_var = 20 ## Global variable
def access_global():
print(global_var) ## Accessible inside the function
access_global()
print(global_var) ## Accessible outside the function
3. Alcance no local
Se utiliza en funciones anidadas para hacer referencia a variables en el alcance de la función exterior (envolvente).
def outer_function():
x = 10
def inner_function():
nonlocal x
x = 20 ## Modifies the outer function's x
inner_function()
print(x) ## Prints 20
outer_function()
Orden de resolución de alcance (Regla LEGB)
Python sigue la regla LEGB para la búsqueda de variables:
graph TD
A[Local Scope] --> B[Enclosing Scope]
B --> C[Global Scope]
C --> D[Built-in Scope]
| Nivel de alcance |
Descripción |
| Local (L) |
Dentro de la función actual |
| Envolvente (E) |
Dentro de las funciones envolventes |
| Global (G) |
En el nivel superior del módulo |
| Integrado (B) |
Espacio de nombres integrado de Python |
Mejores prácticas
- Utilice variables locales siempre que sea posible.
- Minimice el uso de variables globales.
- Utilice las palabras clave
global y nonlocal con cuidado.
- Sea explícito sobre el alcance de las variables.
Errores comunes
x = 10 ## Global variable
def modify_x():
x += 1 ## This will raise an UnboundLocalError
## Python treats x as a local variable due to assignment
def correct_modify_x():
global x
x += 1 ## Now this works correctly
En LabEx, recomendamos comprender estos principios de alcance para escribir código Python más robusto y predecible.