CodeWalk

functools.lru_cache 缓存装饰器

作者:Yahuda · 2026-05-30 12:55

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() 清空缓存

注意:参数必须是可哈希的。