Leçon 3 / 10 — Chapitre 4: Décorateurs
Décorer une fonction qui prend des arguments
Les décorateurs vus jusqu'ici ne fonctionnent qu'avec des fonctions sans argument. Pour décorer une fonction qui en prend, l'enveloppe doit accepter *args et **kwargs (vus dans Python Intermédiaire), et les transmettre telle quelle à la fonction d'origine.
def journaliser(fonction):
def enveloppe(*args, **kwargs):
print("Appel avec", args, kwargs)
resultat = fonction(*args, **kwargs)
print("Resultat :", resultat)
return resultat
return enveloppe
@journaliser
def additionner(a, b):
return a + b
additionner(3, 4)
Ce code affiche Appel avec (3, 4) {}, puis Resultat : 7. *args capture (3, 4) (les arguments positionnels), **kwargs capture un dictionnaire vide (aucun argument nommé ici) — puis fonction(*args, **kwargs) déballe ces valeurs pour les retransmettre à additionner, exactement comme si on avait écrit additionner(3, 4) directement.
Cette même enveloppe fonctionne aussi avec des arguments nommés, sans aucune modification :
additionner(a=3, b=4)
Ce code affiche Appel avec () {'a': 3, 'b': 4} : cette fois, kwargs capture les deux arguments nommés, et args reste vide — l'enveloppe reste générique, quelle que soit la manière dont la fonction décorée est appelée.
À vous de jouer : décorez une fonction à deux paramètres avec une enveloppe utilisant *args, **kwargs, et appelez-la à la fois avec des arguments positionnels et nommés.
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