为什么python生成器只能使用一次?

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

  • 回答 (1)
  • 关注 (0)
  • 查看 (396)

一旦我用了一次生成器,就不能再用了。这是为什么?

考虑以下代码:

def generator(n):
  a = 1

  for _ in range(n):
    yield a
    a += 1

def run_generator(generator):
  for a in generator:
    print(a, end = " ")

如果我要执行这个:

count_generator = generator(10)
run_generator(count_generator)
run_generator(count_generator)

它只会输出:

1 2 3 4 5 6 7 8 9 10

我知道生成器只能使用一次,这是Python内置的东西,但为什么会这样呢?是否有特定的理由只允许执行生成器对象一次?

提问于
用户回答回答于

生成器的工作原理就像磁带。当你调用next在它上面,它给你下一个号码,但是然后它会忘却。它不像清单,这是大部分效率的来源。因为它不需要记住以前的值,所以内存占用要小得多(尤其是在最终需要它的所有值的时候!)

也许可以重新设置一些生成器以使其能够再次运行, 例如,一个生成器,例如:

def gimme_randoms():
    while True:
        yield random.random()

rs = gimme_randoms()
a = next(rs)
b = next(rs)
c = next(rs)  # some numbers

重新设定这个状态意味着什么?好吧,你会想到:

rs2 = gimme_randoms()
x = next(rs2)
y = next(rs2)
z = next(rs2)

assert a == x and b == y and c == z  # Nonsense!

扫码关注云+社区

领取腾讯云代金券