У меня есть функция с именем runquery
, которая выполняет вызовы в базу данных, а затем выдает строки, одну за другой.Я написал декоратор memoize (или, точнее, я просто украл один из этого вопроса стекопотока ), но при последующих вызовах он просто выдает пустую последовательность, предположительно потому, что значения генератора могут быть получены только один раз.
Как я могу изменить декоратор памятки, который работает для генераторов Python?Я понимаю, что в какой-то момент мне нужно будет сохранить его в памяти, но я бы хотел обработать это в декораторе, а не изменять исходную функцию.
Текущий код функции запоминания:
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