Gestionar el alcance de las variables
Tip
Consulte la pestaña Texto e imágenes para obtener más detalles.
Scope es la región del código donde existe una variable y se puede usar. Comprender el ámbito le ayuda a escribir funciones que no interfieren accidentalmente entre sí y le ayuda a evitar una clase completa de errores confusos.
Variables locales
Una variable creada dentro de una función es una variable local. Solo existe mientras se ejecuta la función y no se puede ver desde fuera de la función.
def calculate_total(price, tax):
total = price + tax # `total` is local to this function
return total
calculate_total(10, 2)
print(total) # NameError: name 'total' is not defined
Cada llamada a una función obtiene su propio conjunto de variables locales, por lo que las funciones no sobrescriben accidentalmente los datos de los demás.
Variables globales
Una variable creada fuera de cualquier función es una variable global. Las funciones pueden leer variables globales, pero de forma predeterminada no pueden cambiarlas .
message = "Hello"
def greet():
print(message) # Reading a global variable is fine
greet() # Output: Hello
Si intentas asignar un nuevo valor a una variable que también existe como variable global, Python la considera una nueva variable local: el valor de la variable global permanece sin cambios.
color = "blue"
def change_color():
color = "red" # This creates a new local variable, not the global one
change_color()
print(color) # Output: blue
La palabra clave global (úsela con moderación)
Si realmente necesita cambiar una variable global desde dentro de una función, puede declararla con la global palabra clave :
count = 0
def increment():
global count
count = count + 1
increment()
print(count) # Output: 1
Sin embargo, modificar los globales desde funciones interiores hace que el código sea más difícil de seguir y probar. Un patrón mejor es pasar el valor en como un parámetro y devolver el valor actualizado:
def increment(count):
return count + 1
count = 0
count = increment(count)
print(count) # Output: 1
¿Por qué importa el ámbito?
- Las variables locales mantienen las funciones independientes: una variable de una función no puede arruinar otra.
- Leer variables globales no plantea problemas cuando se trata de constantes, como los valores de configuración.
- Escribir en variables globales desde dentro de las funciones es una fuente habitual de errores difíciles de detectar. Prefiere parámetros y valores de retorno.