functools.lru_cache 缓存装饰器
functools.lru_cache 是什么?如何使用它来优化递归函数的性能?请给出斐波那契数列的例子。
回答
Yahuda
lru_cache 是自动缓存函数返回结果的装饰器,避免重复计算。
from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
# 不加缓存时 fib(40) 需要很长时间
# 加缓存后 fib(100) 立即返回
print(fib(100)) # 354224848179261915075
工作原理:
- 保存参数到返回值的映射
maxsize=None无限制缓存- LRU 策略:最近最少使用的优先淘汰
- 可以查看
fib.cache_info():hits/misses/currsize - 使用
fib.cache_clear()清空缓存
注意:参数必须是可哈希的。