objectif
Mémoriser les résultats de fonctions pures avec capacité limitée.
code minimal
from functools import lru_cache
calls = {"n": 0}
@lru_cache(maxsize=128, typed=True)
def fib(n: int) -> int:
calls["n"] += 1
return 1 if n < 2 else fib(n-1) + fib(n-2)
v = fib(10)
print(v == 89 and calls["n"] < 20) # attendu: True (peu d'appels)
utilisation
from functools import lru_cache
@lru_cache(maxsize=None)
def sq(x): return x*x
print(sq(12) == 144 and sq.cache_info().hits >= 0)
variante(s) utile(s)
from functools import lru_cache
@lru_cache(maxsize=2)
def f(x): return x
f(1); f(2); f(3) # évince 1
print(f.cache_info().misses >= 3)
notes
- typed=True distingue 1 et 1.0; maxsize=None = cache non borné.
- Utilisez cache_clear() pour invalider.