Repaso
English
PythonIntermedioPY-42

¿Cómo funcionan los decorators? Escribe un decorator que registre cuánto tarda una función.

Respuesta

  • Las funciones son objetos: puedes pasarlas y devolverlas.
  • @deco encima de def f significa f = deco(f).
  • El decorator devuelve un wrapper que ejecuta código antes o después de llamar a la original.
  • Usa functools.wraps para conservar el nombre original y el docstring.
  • Con argumentos añades un nivel de factory: @retry(3) significa f = retry(3)(f).
import functools, time

def timed(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        try:
            return func(*args, **kwargs)
        finally:
            ms = (time.perf_counter() - start) * 1000
            print(f"{func.__name__} took {ms:.1f} ms")
    return wrapper

Términos clave

Practica esta pregunta en Repaso