PaliSkill
Python avancé

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

Cas d'usage : chronométrer une fonction

Un décorateur peut mesurer le temps d'exécution d'une fonction, avec le module time — un cas d'usage concret très courant, qui évite d'ajouter manuellement du code de mesure dans chaque fonction à surveiller.

import time
from functools import wraps

def chronometrer(fonction):
    @wraps(fonction)
    def enveloppe(*args, **kwargs):
        debut = time.time()
        resultat = fonction(*args, **kwargs)
        duree = time.time() - debut
        print(f"{fonction.__name__} a pris {duree:.4f} secondes")
        return resultat
    return enveloppe

@chronometrer
def calcul_long():
    total = 0
    for i in range(1000000):
        total = total + i
    return total

calcul_long()

Ce code affiche calcul_long a pris 0.0XXX secondes (la durée exacte varie selon la machine) : time.time() renvoie l'heure actuelle en secondes, mesurée avant et après l'appel à la fonction d'origine, et leur différence donne la durée écoulée.

fonction.__name__ fonctionne correctement ici grâce à @wraps(fonction) (vu dans ce chapitre) : sans lui, le message afficherait "enveloppe a pris..." au lieu du vrai nom de la fonction chronométrée.

À vous de jouer : écrivez un décorateur chronometrer, appliquez-le à une fonction qui fait une boucle de calcul, et affichez sa durée d'exécution.

🔒

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