lru_cache用法
在python中,lru_cache
是一个装饰器, 是 Python 标准库中 functools
模块的一部分。lru_cache
装饰器可以用来为一个函数添加一个缓存系统。这个缓存系统会存储函数的输入和对应的输出。如果函数被调用,并且给出了已经缓存过的输入,那么函数就不会重新计算,而是直接从缓存中获取对应的输出。
LRU 是 “Least Recently Used” 的缩写,意思是 “最近最少使用”。LRU 缓存就是一种缓存淘汰算法,当缓存达到预设的容量上限时,会优先淘汰最近最少使用的数据。
from functools import lru_cache # Python 3.2+ only 引入lru_cache@lru_cache(maxsize=None)
def fib(n):print(f"fib({n})")if n < 2:return nreturn fib(n-1) + fib(n-2)print("第一次:", fib(5))
print("第二次:", fib(5))
print("第三次:", fib(3))
输出结果:
fib(5)
fib(4)
fib(3)
fib(2)
fib(1)
fib(0)
第一次: 5
第二次: 5
第三次: 2
lru_cache
装饰器有两个可选参数:
maxsize
:这个参数用来设置缓存的大小,将其设置为None
,那么缓存的大小就没有上限。typed
:如果你将这个参数设置为True
,那么lru_cache
就会根据输入参数的类型分别进行缓存。
lru_cache
可以用于优化那些具有重复计算的递归函数(记忆化搜索),或者计算成本较高的函数。是通过空间换取时间的方式来提高程序的性能的