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