¿Cuántos callables anidados necesita una implementación típica de un decorator que se usa como @retry(times=3)?
Opciones
- 1
- 2
- 3 (Opción correcta)
- 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 decoratorRecuerda
Un decorator con argumentos es una función que devuelve un decorator.