Python Language lru_cache


Exemple

Le décorateur @lru_cache peut être utilisé pour @lru_cache une fonction coûteuse et intensive en calcul avec un cache moins utilisé récemment . Cela permet de mémoriser les appels de fonctions, de sorte que les futurs appels avec les mêmes paramètres puissent revenir instantanément au lieu de devoir être recalculés.

@lru_cache(maxsize=None)  # Boundless cache
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

>>> fibonacci(15)

Dans l'exemple ci-dessus, la valeur de fibonacci(3) n'est calculée qu'une seule fois, alors que si fibonacci n'avait pas de cache LRU, fibonacci(3) aurait été calculé plus de 230 fois. Par conséquent, @lru_cache est particulièrement @lru_cache aux fonctions récursives ou à la programmation dynamique, où une fonction coûteuse peut être appelée plusieurs fois avec les mêmes paramètres exacts.

@lru_cache a deux arguments

  • maxsize : nombre d'appels à enregistrer. Lorsque le nombre d'appels uniques dépasse la maxsize , le cache LRU supprime les appels les moins récemment utilisés.
  • typed (ajouté en 3.3): Indicateur permettant de déterminer si des arguments équivalents de différents types appartiennent à des enregistrements de cache différents (par exemple, si les arguments 3.0 et 3 sont différents)

Nous pouvons également voir les statistiques du cache:

>>> fib.cache_info()
CacheInfo(hits=13, misses=16, maxsize=None, currsize=16)

REMARQUE : Comme @lru_cache utilise des dictionnaires pour mettre en cache les résultats, tous les paramètres de la fonction doivent être gérables pour que le cache fonctionne.

@lru_cache Python officiels pour @lru_cache . @lru_cache été ajouté en 3.2.