Glosario de Python

Qué es un decorador en Python

Un decorador recibe una función y devuelve otra versión con comportamiento adicional.

Definición

En Python las funciones son valores: pueden guardarse, enviarse como argumento y devolverse. Un decorador usa esa capacidad para envolver una función con una nueva, normalmente llamada wrapper o envoltura.

@decorador encima de una definición equivale a reasignar el nombre: saludo = decorador(saludo). Sin paréntesis entregas la función; con paréntesis la ejecutas.

Ejemplo

ejemplo.py
def entusiasta(funcion):
    def envoltura():
        return funcion() + "!"
    return envoltura

@entusiasta
def saludo():
    return "Hola"

print(saludo())

Al ejecutarlo, Python muestra:

Salida
Hola!

Puedes copiar el ejemplo y cambiarlo en el editor Python del navegador: modificar un valor y predecir el resultado es la mejor forma de fijar el concepto.

Error frecuente

Escribir otra = saludo no ejecuta la función: guarda la función como valor. Los paréntesis son los que la llaman.

Cómo se diferencia de otros conceptos

Un decorador no cambia la función original: la sustituye por otra que la envuelve. Es distinto de llamar a una función: @decorador se aplica una vez, al definir la función, y prepara qué hará el nombre cada vez que se use. Se apoya en que las funciones son valores, igual que los números o los textos.

Preguntas frecuentes

¿Para qué se usan los decoradores?

Para añadir un comportamiento común a varias funciones sin repetir código: medir el tiempo, comprobar permisos, registrar llamadas o guardar resultados.

¿Necesito decoradores para empezar?

No. Son una ampliación. Domina primero funciones, parámetros y retorno; los decoradores se entienden mucho mejor después.

Dónde seguir