В настоящее время я пытаюсь разобраться с генераторами python.
Я создаю следующую простую функцию:
def simpleGeneratorFun():
yield 1
yield 2
yield 3
yield 4
Затем:
for value in simpleGeneratorFun():
print(value)
Это логически вывод:
1
2
3
4
Назначение их переменным, похоже, работает точно.
b = simpleGeneratorFun()
print(id(b))
c = simpleGeneratorFun()
print(id(c))
Вывод:
122357576
122356552
Затем:
print(next(b))
print(next(c))
print(next(b))
print(next(c))
print(next(b))
print(next(c))
print(next(b))
print(next(c))
Вывод:
1
1
2
2
3
3
4
4
Поэтому я решил сделать следующее:
print(id(simpleGeneratorFun()),next(simpleGeneratorFun()))
print(id(simpleGeneratorFun()),next(simpleGeneratorFun()))
Вывод:
122355912 1
122355912 1
Странно, хотя на этот раз я вызываю точно такую же функцию (обеспечивается de ID), кажется, что она не сохраняет состояние генераторов.
Следующая вещь, которую я попробовал:
print(id(simpleGeneratorFun()),next(simpleGeneratorFun()),next(simpleGeneratorFun()),next(simpleGeneratorFun()))
Вывод:
122355912 1 1 1
Но если я кодирую это:
d = simpleGeneratorFun()
print(id(d),next(d),next(d),next(d),next(d))
Вывод:
122355912 1 2 3 4
Почему это происходит? Разве он не должен продолжать серию, а не начинать заново?