Leçon 8 / 10 — Chapitre 4: Décorateurs
Cas d'usage : une mise en cache simple
Un décorateur de cache (ou *mémoïsation*) stocke le résultat d'un appel déjà effectué, pour le renvoyer immédiatement si la fonction est rappelée avec les mêmes arguments — évitant de recalculer inutilement.
from functools import wraps
def cache(fonction):
resultats = {}
@wraps(fonction)
def enveloppe(n):
if n not in resultats:
print(f"Calcul pour {n}")
resultats[n] = fonction(n)
return resultats[n]
return enveloppe
@cache
def carre(n):
return n * n
print(carre(5))
print(carre(5))
print(carre(3))
Ce code affiche Calcul pour 5, 25, puis 25 (sans recalcul, directement depuis resultats), puis Calcul pour 3, 9. Le dictionnaire resultats est créé une seule fois, lors de la décoration — grâce à la closure, enveloppe s'en souvient entre les appels, et vérifie n not in resultats (vu dans Python Intermédiaire) avant de calculer à nouveau.
Le module standard functools fournit un décorateur de cache déjà prêt, @lru_cache, plus complet que cette version simplifiée mais basé sur exactement le même principe.
À vous de jouer : écrivez un décorateur de cache pour une fonction à un argument, et vérifiez qu'un second appel avec la même valeur n'affiche pas de nouveau message de calcul.
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