【发布时间】:2015-07-29 09:12:51
【问题描述】:
我正在观看 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
我不是装饰器方面的专家,但是在发现项目被缓存时返回对 newfunc(*args) 的调用不会导致递归循环永远不会结束吗?我认为它应该返回 saved[args] (该函数最终返回的结果,这是同一件事,但我认为如果在缓存中找到一个项目,它永远不会到达那里。)
【问题讨论】:
-
你能说明
wraps是如何定义的吗? -
@Asad:几乎可以肯定是
from functools import wraps。 -
您能否链接到视频(最好带有时间戳)——或者,如果他有附加的幻灯片演示文稿,可以链接到幻灯片吗?这看起来肯定是错误的,甚至 Raymond Hettinger 也不会犯愚蠢的错别字。
-
pyvideo.org/video/1780/… -- @ 41:10
-
@Solaxun 可能是一个错字。现在定义的方式肯定不使用缓存。