Gestionar el alcance de las variables

Completados

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.