Могу ли я запоминать генератор Python?

У меня есть функция 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

22
задан Community 23 May 2017 в 10:31
поделиться