use*_*984 30 python recursion functional-programming
最近我遇到了functools.cache,不知道它与functools.lru_cache.
我找到了关于和之间的区别的帖子,但没有专门针对和 的帖子。functools.cached_propertylru_cachecachelru_cache
use*_*984 44
functools.cache是3.9版本新添加的。
文档指出:
\n\n\n简单的轻量级无界函数缓存。有时称为 \xe2\x80\x9cmemoize\xe2\x80\x9d。
\n返回与 相同
\nlru_cache(maxsize=None),为函数参数的字典查找创建一个薄包装器。因为它永远不需要驱逐旧值,所以这比lru_cache()大小限制更小、更快。
文档中的示例:
\n@cache\ndef factorial(n):\n return n * factorial(n-1) if n else 1\n\n>>> factorial(10) # no previously cached result, makes 11 recursive calls\n3628800\n>>> factorial(5) # just looks up cached value result\n120\n>>> factorial(12) # makes two new recursive calls, the other 10 are cached\n479001600\nRun Code Online (Sandbox Code Playgroud)\n所以,简而言之:cache和lru_cache(maxsize=None)完全相同(链接到 cpython 源代码)。但在您不想限制缓存大小的情况下,使用cache可能会使代码更清晰,因为没有限制的最近最少使用的缓存没有多大意义。