← retour aux snippets

functools: lru_cache pour mémoisation

Mémoriser les résultats de fonctions pures avec capacité limitée.

python performance #functools#cache#memoisation

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.