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能够显著降低运算时间。
网友评论