如何理解Python生成器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (38)

我如何修改用于Python生成器的memoized装饰器?我意识到我需要在某个时候将它存储在内存中,但是我想在装饰器中处理这个问题,而不是修改原来的函数。

memoized函数的代码是:

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
提问于
用户回答回答于
from itertools import tee
from types import GeneratorType

Tee = tee([], 1)[0].__class__

def memoized(f):
    cache={}
    def ret(*args):
        if args not in cache:
            cache[args]=f(*args)
        if isinstance(cache[args], (GeneratorType, Tee)):
            # the original can't be used any more,
            # so we need to change the cache as well
            cache[args], r = tee(cache[args])
            return r
        return cache[args]
    return ret
用户回答回答于
from itertools import tee

sequence, memoized_sequence = tee (sequence, 2)

对于生成器来说更容易,因为标准库有这个“TEE”方法!

扫码关注云+社区

领取腾讯云代金券