這是我的代碼有兩臺發電機定義:發電機可以多次使用嗎?
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 range in(3))',你的第一個例子將是等價的(每次調用函數時都會生成一個生成器)。 –
密切相關:[Generator Expression vs yield:爲什麼不是'next()'工作?](// stackoverflow.com/q/10958771) –