【发布时间】:2011-06-01 19:02:10
【问题描述】:
我有一个名为runquery 的函数,它调用数据库,然后一一生成行。我写了一个 memoize 装饰器(或者更准确地说,我只是从 this stackoverflow question 偷了一个),但在随后的调用中它只会产生一个空序列,大概是因为生成器的值只能产生一次。
如何修改适用于 Python 生成器的 memoization 装饰器?我意识到我需要在某个时候将它存储在内存中,但我想在装饰器中处理它而不是修改原始函数。
memoization函数的当前代码是:
def memoized(f):
# Warning: Doesn't work if f yields values
cache={}
def ret(*args):
if args in cache:
return cache[args]
else:
answer=f(*args)
cache[args]=answer
return answer
return ret
【问题讨论】:
标签: python generator memoization