Translate

lunes, 5 de octubre de 2020

Function caching de Python


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()