@cache 是 lru_cache(maxsize=none) 的别名,提供无界缓存且不支持 maxsize、typed 等参数;它继承 cache_clear 方法但语义更专注,要求被装饰函数为纯函数。

@cache 本质就是 lru_cache(maxsize=None) 的别名
它不是新算法,而是标准库对常用配置的封装。Python 3.9 把 @lru_cache(maxsize=None) 这个写法直接提成一个独立装饰器 @cache,省掉参数、括号和显式指定 maxsize。背后仍是 lru_cache 的实现逻辑,只是接口更窄、更专注。
@cache 不支持 maxsize、typed 等参数
这是“简洁”的代价:你不能用 @cache 设置缓存上限或开启类型敏感模式。如果需要这些能力,必须退回用 @lru_cache:
-
@cache固定为无界缓存,内存占用随调用参数组合线性增长 -
@lru_cache(maxsize=128, typed=True)可控、可预测,适合生产环境关键函数 - 想清空缓存?
@cache没有.cache_clear()方法 —— 实际上有,但它继承自lru_cache,所以依然可用;但文档不承诺该行为长期稳定
性能差异几乎可以忽略,但语义更明确
因为去掉参数解析和条件分支,@cache 调用开销略小,不过通常差几个纳秒。真正价值在于表达意图:@cache 明确表示“我要无限制记忆化,且不关心淘汰策略”,而 @lru_cache 天然暗示“我在意缓存容量和访问局部性”。
容易被忽略的一点:所有缓存装饰器都要求函数是纯函数。如果函数依赖外部状态(比如全局变量、文件读取、time.time()),@cache 会静默返回过期结果,且完全不报错。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











