这是我的代码片段,其中定义了两个生成器:
one_line_gen = (x for x in range(3))
def three_line_gen():
yield 0
yield 1
yield 2
当我执行:
for x in one_line_gen:
print x
for x in one_line_gen:
print x
结果如预期:
0
1
2
然而,如果我执行:
for x in three_line_gen():
print x
for x in three_line_gen():
print x
结果是:
0
1
2
0
1
2
为什么?我以为所有的发电机只能用一次。
def one_line_gen(): return (x for x in range(3))
,你的第一个例子将是等效的(每次调用函数都会产生一个生成器)。 - Martijn Pieters