Funciones de Python – lru_cache()

El módulo functools en Python trata con funciones de orden superior, es decir, funciones que operan (tomando como argumentos) o que devuelven funciones y otros objetos a los que se puede llamar. El módulo functools proporciona una amplia gama de métodos, como cached_property(func), cmp_to_key(func), lru_cache(func), wraps(func),etc. Vale la pena señalar que estos métodos toman funciones como argumentos.

lru_caché()

lru_cache()es una de esas funciones en el módulo functools que ayuda a reducir el tiempo de ejecución de la función mediante el uso de la técnica de memorización.

Sintaxis:
@lru_cache(maxsize=128, typed=False)

Parámetros:
maxsize: este parámetro establece el tamaño de la memoria caché, la memoria caché puede almacenar hasta maxsize las llamadas de función más recientes, si maxsize se establece en Ninguno, la función LRU se desactivará y la memoria caché puede crecer sin ninguna limitación
.
establecido en True, los argumentos de función de diferentes tipos se almacenarán en caché por separado. Por ejemplo, f(3) y f(3.0) se tratarán como llamadas distintas con resultados distintos y se almacenarán en dos entradas separadas en la memoria caché.

Ejemplo 1

from functools import lru_cache
import time
  
  
# Function that computes Fibonacci 
# numbers without lru_cache
def fib_without_cache(n):
    if n < 2:
        return n
    return fib_without_cache(n-1) + fib_without_cache(n-2)
      
# Execution start time
begin = time.time()
fib_without_cache(30)
  
# Execution end time
end = time.time()
  
print("Time taken to execute the\
function without lru_cache is", end-begin)
  
# Function that computes Fibonacci
# numbers with lru_cache
@lru_cache(maxsize = 128)
def fib_with_cache(n):
    if n < 2:
        return n
    return fib_with_cache(n-1) + fib_with_cache(n-2)
      
begin = time.time()
fib_with_cache(30)
end = time.time()
  
print("Time taken to execute the \
function with lru_cache is", end-begin)

Producción:

El tiempo necesario para ejecutar la función sin lru_cache es 0,4448213577270508
El tiempo necesario para ejecutar la función con lru_cache es 2,8371810913085938e-05

Ejemplo 2:

from functools import lru_cache
  
@lru_cache(maxsize = 100)
def count_vowels(sentence):
    sentence = sentence.casefold()
    return sum(sentence.count(vowel) for vowel in 'aeiou')
      
print(count_vowels("Welcome to Geeksforgeeks"))

Producción:

9

Publicación traducida automáticamente

Artículo escrito por sathvik chiramana y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *