Sie sind Erneut der Generator jedes Mal, so dass es von Anfang an jedes Mal beginnt.
Erstellen Sie den Generator einmal:
gen = mygen()
gen.next()
gen.next()
gen.next()
Generator-Funktionen ein neues Iterator erzeugen jedes Mal, wenn sie nennen; Auf diese Weise können Sie mehrere unabhängige Kopien erstellen. Jeder unabhängige Iterator ist ein Aufruf der Funktion, die durch separat verstärkt werden kann von den anderen:
>>> def mygen():
... i = 0
... j = 3
... for k in range(i, j):
... yield k
...
>>> gen1 = mygen()
>>> gen2 = mygen()
>>> gen1.next()
0
>>> gen1.next()
1
>>> gen2.next()
0
>>> gen2.next()
1
>>> gen1.next()
2
>>> gen1.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Beachten Sie, dass Sie wahrscheinlich die next()
function statt Aufruf generator.next()
direkt verwenden möchten:
next(gen)
generator.next()
ist als ein Haken (Python 3 hat es in generator.__next__()
umbenannt und die next()
Funktion ist die offizielle API, um es in einer versionsübergreifenden kompatiblen Weise aufzurufen.