缓存装饰器 Python

Sol*_*xun 4 python caching decorator

我正在观看 Raymond Hettinger 的一段很棒的视频,我对装饰器示例有点困惑:

def cache(func):
    saved={}
    @wraps(func)
    def newfunc(*args):
        if args in saved:
            return newfunc(*args) # should be return saved[args]?
        result = func(*args)
        saved[args]=result
        return result
    return newfunc
Run Code Online (Sandbox Code Playgroud)

我不是装饰器方面的专家,但是在发现该项目被缓存时对 newfunc(*args) 的调用返回不会导致永远不会结束的递归循环吗?我认为它应该返回保存的[args](该函数最终返回结果,这是同一件事,但我认为如果在缓存中找到一个项目,它永远不会到达那里。)

小智 5

您还可以使用@functools.lru_cache(maxsize=128, typed=False)\xc2\xb6 \n这看起来像:

\n\n
from functools import lru_cache\n\n@lru_cache(maxsize=None)\ndef fib(n):\n    if n < 2:\n        return n\n    return fib(n-1) + fib(n-2)\n
Run Code Online (Sandbox Code Playgroud)\n