PaliSkill
Python avancé

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

Un décorateur qui prend lui-même des arguments

Un décorateur comme @repeter(3) (qui répète l'appel trois fois) a besoin d'un niveau supplémentaire de fonction imbriquée : une fonction qui reçoit l'argument du décorateur (3), et renvoie le décorateur proprement dit.

def repeter(nombre_fois):
    def decorateur(fonction):
        def enveloppe(*args, **kwargs):
            for i in range(nombre_fois):
                resultat = fonction(*args, **kwargs)
            return resultat
        return enveloppe
    return decorateur

@repeter(3)
def dire_bonjour():
    print("Bonjour")

dire_bonjour()

Ce code affiche Bonjour trois fois. repeter(3) s'exécute en premier et renvoie decorateur, qui se souvient de nombre_fois=3 (une closure, vue dans Python Intermédiaire) — c'est ce decorateur renvoyé qui est ensuite appliqué à dire_bonjour, exactement comme @journaliser l'était directement à la leçon précédente.

Trois niveaux s'enchaînent : repeter(nombre_fois)decorateur(fonction)enveloppe(*args, **kwargs) — chaque niveau se souvient de ce qui lui a été passé, grâce aux closures.

À vous de jouer : écrivez un décorateur repeter(n) qui exécute une fonction n fois, et testez-le avec des valeurs différentes de n.

🔒

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