El almacenamiento en caché de funciones nos permite almacenar en caché los valores de retorno de una función en función de los argumentos. Puede ahorrar tiempo cuando se llama periódicamente a una función vinculada a entrada/salida con los mismos argumentos. Antes de Python 3.2, teníamos que escribir una implementación personalizada. En Python 3.2+ hay un decorador lru_cache que nos permite almacenar en caché y deseleccionar rápidamente los valores de retorno de una función.
Veamos cómo podemos usarlo en Python 3.2+
Implementemos una secuencia de Fibonacci y usemos lru_cache.
from functools import lru_cache
@lru_cache(maxsize=32)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
>>> print([fib(n) for n in range(10)])
# Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
El argumento maxsize le dice a lru_cache cuántos valores de retorno recientes se almacenan en caché.
También podemos eliminar en caché fácilmente los valores de retorno usando:
fib.cache_clear()