_ = yield i
yield _
Zuerst es yield
s die durch i
referenzierten Wert, z.B. 1
. Dann gibt es den Wert zurück, der von der yield
-Operation zurückgegeben wird, die None
ist. Dies geschieht bei jeder Iteration der Schleife.
for i in x:
_ = yield i
Dieses einfach yield
s die durch i
referenzierten Wert, z.B. 1
, geht dann zur nächsten Iteration der Schleife über und erzeugt 2
, dann 3
.
Im Gegensatz zu return
, das yield
Schlüsselwort kann in einem Ausdruck verwendet werden:
x = return 0 # SyntaxError
x = yield 0 # perfectly fine
Nun, wenn der Dolmetscher ein yield
sieht, wird es den angegebenen Wert generieren. Wenn dies jedoch der Fall ist, gibt diese Operation den Wert None
zurück, genau wie mylist.append(0)
oder print('hello')
wird return
der Wert None
. Wenn Sie dieses Ergebnis einer Referenz wie _
zuweisen, speichern Sie diese None
.
also im ersten Schnipsel, sind Sie ein Objekt ergeben, dann speichern Sie das „Ergebnis“ der yield
Operation, die None
ist, und dann Sie yield
dass None
. Im zweiten Ausschnitt geben Sie ein Objekt, dann speichern Sie das "Ergebnis" dieser yield
Operation, aber Sie nie yield
das Ergebnis, so None
erscheint nicht in der Ausgabe.
Beachten Sie, dass yield
nicht immer None
zurückgibt - dies ist nur, was Sie an den Generator mit send()
gesendet haben. Da das in diesem Fall nichts war, bekommst du None
. Siehe this answer für mehr auf send()
.
I Bin mir nicht ganz sicher warum, aber die eine Frage mos t in der Python-Frage in der "Related" -Liste erscheint, ist die [yield-Frage] (http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python)), auch wenn die fragliche Frage nichts mit "Ertrag" zu tun hat. Diesmal ist es jedoch verwandt. – TigerhawkT3