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.