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
def entusiasta(funcion):
def envoltura():
return funcion() + "!"
return envoltura
@entusiasta
def saludo():
return "Hola"
print(saludo())Al ejecutarlo, Python muestra:
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
- Aprende el concepto paso a paso en la lección Envuelve una función con un decorador.
- Función: definición y ejemplo
- Generador: definición y ejemplo
- Ver todos los términos del glosario