实用装饰器 lru_cache

2022-10-17  本文已影响0人  alue

python 的functools 提供了许多实用的工具,lru_cache是经常用到的一种。它的作用是缓存该函数调用的结果,下一次再调用此函数时,会先看之前是否有过缓存。在一些场景下,能够有效的提升程序性能。

例如,下面是递归求解斐波那契数列的程序,对用缓存与不用缓存的两种方式进行了对比。


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)

输出结果如下:

Time taken to execute thefunction without lru_cache is 19.193517684936523
Time taken to execute the function with lru_cache is 0.0

可以看出,对于这种递归调用,lru_cache能够显著降低运算时间。

上一篇下一篇

猜你喜欢

热点阅读