Python verfügt über einen Befehl namensield, um das Erstellen eines Generators zu vereinfachen. Ich habe das Verhalten nicht wirklich verstanden, deshalb werde ich unten eine Notiz hinterlassen.
test.py
def yield_test():
list0to4 = [0, 1, 2, 3, 4]
for i in list0to4:
yield i
for j in yield_test()
print j
Wenn Sie den obigen Code ausführen, lautet die Ausgabe wie folgt.
0
1
2
3
4
Alle Elemente von [0, 1, 2, 3, 4] können der Reihe nach gelesen werden.
Betrachten Sie nun den Fall der Verwendung eines anderen Generators in Kombination.
test.py
def yield_test1():
list0to4 = [0, 1, 2, 3, 4]
for i in list0to4:
yield i
def yield_test2():
list0to2 = [0, 1, 2]
for i in list0to2:
yield i
iter0to2 = yield_test2()
for j in yield_test1()
print j + iter0to2.next()
In diesem Fall lautet die Ausgabe wie folgt.
0
2
4
Yield_test2 hat weniger Elemente als Yield_test1, aber es gibt keine besonderen Fehler.
Der Generator löst eine Ausnahme [StopIteration] aus, wenn er das nächste ohne das nächste Element liest. In der for-Anweisung usw. scheint die Schleife durch Ausschließen dieser [Stop Iteration] gestoppt zu werden. Daher löst iter0to2.next () im obigen Beispiel [StopIteration] aus. Auch wenn das Element auf der Seiteield_test1 () verbleibt, wird die for-Anweisung weggelassen.
Welcher hat bei Verwendung einer Generatorkombination dazu geführt, dass die Schleife beendet wurde? Bitte beachten Sie, dass es möglicherweise schwer zu verstehen ist.
Recommended Posts