PaliSkill
← Python avancé

Leçon 1 / 10 — Chapitre 4: Décorateurs

Fonctions comme objets, sans le raccourci @

Python Intermédiaire a déjà montré qu'une fonction peut être passée en argument à une autre. Un décorateur pousse cette idée un cran plus loin : une fonction qui reçoit une autre fonction et renvoie une nouvelle fonction qui l'enveloppe.

def journaliser(fonction):
    def enveloppe():
        print("Appel de la fonction...")
        resultat = fonction()
        print("Fonction terminee")
        return resultat
    return enveloppe

def dire_bonjour():
    print("Bonjour")

dire_bonjour = journaliser(dire_bonjour)
dire_bonjour()

Ce code affiche Appel de la fonction..., Bonjour, puis Fonction terminee. journaliser(dire_bonjour) renvoie enveloppe, une closure (vue dans Python Intermédiaire) qui se souvient de fonction (ici, dire_bonjour d'origine) — dire_bonjour = journaliser(dire_bonjour) remplace ensuite la variable dire_bonjour par cette version enveloppée.

Cette dernière ligne, dire_bonjour = journaliser(dire_bonjour), est exactement ce que le raccourci @journaliser fait automatiquement — la leçon suivante introduit cette syntaxe.

À vous de jouer : écrivez une fonction journaliser qui enveloppe une autre fonction, et remplacez manuellement la fonction d'origine par sa version enveloppée avec f = journaliser(f).

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que l'attestation finale.

9 000 XOF / 13,72 € / 14,95 $

Débloquez les 94 leçons restantes de ce module

Pour vous communiquer où envoyer le paiement.

Moyen de paiement souhaité

Nous vous contactons pour le paiement — activé dès réception.