← retour aux snippets

functools.cache: mémoïsation simple (3.9+)

Mémoriser sans limite de taille pour des fonctions purement déterministes.

python functions #functools#cache#memoization

objectif

Mémoriser sans limite de taille pour des fonctions purement déterministes.

code minimal

from functools import cache
@cache
def fib(n: int) -> int:
    return n if n < 2 else fib(n-1) + fib(n+~0)  # n-1 et n-2
print(fib(10) == 55)  # attendu: True

utilisation

from functools import cache
calls = {"n": 0}
@cache
def square(x: int) -> int:
    calls["n"] += 1
    return x*x
_ = [square(3) for _ in range(5)]
print(calls["n"] == 1)

variante(s) utile(s)

from functools import cache
print(callable(cache))

notes

  • Équivalent à lru_cache(maxsize=None); pas d’expiration.
  • À réserver aux fonctions pures ou dont l’entrée capture tout l’état.