Это мой фрагмент кода с двумя определенными генераторами:
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))
, ваш первый пример был бы эквивалентен (создание генератора каждый раз, когда вы вызываете функцию). - person Martijn Pieters   schedule 30.07.2017