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
À faireA 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
À faireQue 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