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).

À vous de jouer

À faire

A quoi f = journaliser(f) equivaut-il, une fois qu'on connait la syntaxe @ ?

Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.

💡 une syntaxe déjà vue dans ce chapitre

À vous de jouer

À faire

Que renvoie une fonction decoratrice comme journaliser(fonction) ?

Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.

💡 une courte réponse

Quitter le module