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