Repaso
English
PythonAvanzadoPY-08

¿Cuántos callables anidados necesita una implementación típica de un decorator que se usa como @retry(times=3)?

Opciones

  1. 1
  2. 2
  3. 3 (Opción correcta)
  4. 4

Respuesta

3

Por qué

@retry(times=3) primero LLAMA a retry(3). Esa llamada debe devolver un decorator.

El decorator recibe tu función y devuelve un wrapper.

El wrapper se ejecuta cada vez que se llama a tu función.

Así que hay tres niveles: retry (configuración) → decorator (función) → wrapper (argumentos de la llamada).

def retry(times):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            for attempt in range(times):
                try:
                    return func(*args, **kwargs)
                except Exception:
                    if attempt == times - 1:
                        raise
        return wrapper
    return decorator

Recuerda

Un decorator con argumentos es una función que devuelve un decorator.

Términos clave

Practica esta pregunta en Repaso