最近我遇到了functools.cache,不知道它与functools.lru_cache有什么不同。
我发现了帖子关于functools.cached_property和lru_cache之间的区别,但没有专门针对cache和lru_cache。
发布于 2021-12-10 08:10:53
functools.cache是在3.9版中新增的。
这些文件指出:
简单的轻量级无界函数缓存。有时被称为“回忆录”。 返回与
lru_cache(maxsize=None)相同的内容,在字典查找函数参数时创建一个薄包装器。因为它从来不需要删除旧值,所以它比具有大小限制的lru_cache()更小、更快。
文档中的示例:
@cache
def factorial(n):
return n * factorial(n-1) if n else 1
>>> factorial(10) # no previously cached result, makes 11 recursive calls
3628800
>>> factorial(5) # just looks up cached value result
120
>>> factorial(12) # makes two new recursive calls, the other 10 are cached
479001600因此,简而言之:cache和lru_cache(maxsize=None)完全相同(从链接到cpython源代码)。但是,在不想限制缓存大小的情况下,使用cache可能会使代码更加清晰,因为最近使用最少的没有限制的缓存没有多大意义。
https://stackoverflow.com/questions/70301475
复制相似问题