@lru_cache适用于输入全为不可变类型、无外部依赖、重复调用多且计算开销大的纯函数;支持maxsize和typed参数,提供cache_info、cache_clear和__wrapped__等缓存管理功能。

@lru_cache 是 python 标准库 functools 中提供的一个装饰器,用于为函数添加**最近最少使用(LRU)缓存**,避免重复计算,显著提升性能,尤其适合纯函数(相同输入总返回相同输出、无副作用)。
什么时候该用 @lru_cache?
适用于满足以下条件的函数:
- 输入参数全部是不可变类型(如 int、str、tuple),因为缓存键基于参数哈希;list、dict、set 等可变类型会直接报错。
- 函数逻辑稳定、无外部状态依赖(比如不读文件、不查数据库、不调用 time.time())。
- 存在大量重复调用且计算开销大(如递归斐波那契、解析固定字符串、数值计算等)。
基础用法与参数说明
最简写法:
from functools import lru_cache
@lru_cache()
def my_func(x, y):
return x ** y + x * y
常用参数:
立即学习“Python免费学习笔记(深入)”;
- maxsize:缓存最大条目数,默认
128;设为 <code>None表示无限制(慎用,防内存泄漏)。 - typed:是否区分参数类型,默认
False。设为True后,f(1)和f(1.0)被视为不同调用(因 int ≠ Float)。
查看与管理缓存状态
装饰后函数会自带三个实用属性和方法:
-
my_func.cache_info():返回命名元组CacheInfo(hits, misses, maxsize, currsize),方便监控命中率。 -
my_func.cache_clear():清空当前缓存,适合在数据源更新后重置。 -
my_func.__wrapped__:访问原始未装饰函数,可用于测试或调试。
常见陷阱与注意事项
容易踩坑的地方: