PaliSkill
Python avancé

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