PaliSkill
Python avancé

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