用 Python 的 LRU Cache 优化函数性能
在日常开发中,我们常会遇到一些计算成本高但调用频繁的函数。Python 标准库 functools 中的 lru_cache 装饰器可以轻松实现缓存功能,显著提升程序性能。
什么是 LRU Cache?
LRU(Least Recently Used)是一种缓存淘汰策略,当缓存达到容量上限时,会优先移除最久未使用的数据。lru_cache 将函数调用结果缓存起来,当相同参数再次传入时直接返回缓存结果,避免重复计算。
实战示例
下面以计算斐波那契数列为例展示其效果:
from functools import lru_cache
import time
# 未使用缓存
def fib_no_cache(n):
if n < 2:
return n
return fib_no_cache(n-1) + fib_no_cache(n-2)
# 使用缓存
@lru_cache(maxsize=128)
def fib_cached(n):
if n < 2:
return n
return fib_cached(n-1) + fib_cached(n-2)
# 性能对比
start = time.time()
fib_no_cache(35)
print(f"无缓存耗时: {time.time()-start:.2f}秒")
start = time.time()
fib_cached(35)
print(f"有缓存耗时: {time.time()-start:.2f}秒")
测试显示,计算 fib(35) 时,使用缓存可将耗时从数秒降低到毫秒级,差异显著。
使用建议
- 适用场景:纯函数(相同输入必得相同输出)、计算密集型函数、递归函数
- 设置合理的 maxsize:根据内存限制和函数特性调整缓存大小
- 注意内存占用:缓存参数和结果会占用内存,需监控使用情况
lru_cache 是 Python 中“开箱即用”的性能优化工具之一,合理使用能让代码既简洁又高效。