これは、定義された2つの発電機を使用してコードの私の作品です:私は実行するとジェネレータは複数回使用できますか?
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(3))' 'を使用した場合、最初の例は同等です(関数を呼び出すたびにジェネレータを生成します)。 –
密接に関連しています:[ジェネレータの式対yield:なぜ 'next()'が動作しないのですか?(// stackoverflow.com/q/10958771) –