同样输入反复计算同样结果时,缓存可以减少重复工作。lru_cache很方便,但不适合无条件包住所有函数,尤其是依赖外部状态或返回可变对象的函数。

先确认输入与结果关系稳定
适合本例的函数只根据整数参数计算平方,不读时间、网络或账户状态。缓存会保留参数和结果的引用,参数还需要可哈希。若结果随着文件内容或权限变化,就需要明确失效机制,不能长期沿用旧结果。
缓存大小与清理要有约定
maxsize限制保留条目数量,cache_info可查看命中与未命中,cache_clear可清空当前函数缓存。它们帮助观察行为,但命中率高并不自动证明程序整体更快,仍应结合真实成本判断。
用调用次数检查小例子
下面对同一参数调用两次,函数正文只运行一次。示例验证缓存机制,不是性能基准。实际并发下还要阅读线程行为约定,不能把缓存当成防止业务重复执行的锁或幂等机制。
可以运行的练习
from functools import lru_cache
calls = 0
@lru_cache(maxsize=16)
def square(n):
global calls
calls += 1
return n * n
assert square(7) == square(7) == 49
assert calls == 1
assert square.cache_info().hits == 1
print(square.cache_info())
示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。
资料与继续学习
Python:functools.lru_cache。资料查阅日期:2026年9月26日。步骤与练习由本站整理。
资料查阅与编辑日期:2026年9月26日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







