Leçon 5 / 10 — Chapitre 4: Décorateurs
Un décorateur qui prend lui-même des arguments
Un décorateur comme @repeter(3) (qui répète l'appel trois fois) a besoin d'un niveau supplémentaire de fonction imbriquée : une fonction qui reçoit l'argument du décorateur (3), et renvoie le décorateur proprement dit.
def repeter(nombre_fois):
def decorateur(fonction):
def enveloppe(*args, **kwargs):
for i in range(nombre_fois):
resultat = fonction(*args, **kwargs)
return resultat
return enveloppe
return decorateur
@repeter(3)
def dire_bonjour():
print("Bonjour")
dire_bonjour()
Ce code affiche Bonjour trois fois. repeter(3) s'exécute en premier et renvoie decorateur, qui se souvient de nombre_fois=3 (une closure, vue dans Python Intermédiaire) — c'est ce decorateur renvoyé qui est ensuite appliqué à dire_bonjour, exactement comme @journaliser l'était directement à la leçon précédente.
Trois niveaux s'enchaînent : repeter(nombre_fois) → decorateur(fonction) → enveloppe(*args, **kwargs) — chaque niveau se souvient de ce qui lui a été passé, grâce aux closures.
À vous de jouer : écrivez un décorateur repeter(n) qui exécute une fonction n fois, et testez-le avec des valeurs différentes de n.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 87 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès