Ich versuche Sendefunktion des Generators, ich war, dass die Sende erwartet den Wert ändern, die Ausbeute ist ist, so habe ich versucht, in ipython:Python "senden" -Methode ändert nicht den Wert von "nächsten"?
In [17]: def z(n):
...: i=0
...: while(i<n):
...: val=yield i
...: print "value is:",val
...: i+=1
...:
In [24]: z1=z(10)
In [25]: z1.next()
Out[25]: 0
In [26]: z1.send(5) # I was expecting that after "send", output value will become "5"
value is: 5
Out[26]: 1
In [27]: z1.next()
value is: None # I was expecting that z1.next() will restart from "6" because I sent "5"
Out[27]: 2
Nun, ich glaube, ich falsches Verständnis davon hatten, was wirklich „senden“ tut , wie man es korrigiert?
Wenn ich einfach z1.next() verwende, druckt es Zahlen; Wenn Sie "print z1.next()" verwenden, wird die Anweisung "value is" angezeigt. Warum? – Troskyvs
@Troskyvs Aktualisiert Antwort ein wenig, hoffentlich, dass die Antworten auf Ihre Frage. – niemmi
Danke, ich begann Ihren Punkt zu verstehen, innerhalb des Generators bedeutet "val = yield i", dass val vom äußeren "send" -Befehl gesetzt wird, während der äußere Aufrufer den Rückgabewert von "yield i" erhält. Das ist wirklich schwierig zu verstehen, warum "next()" gleich "send (None)" ist und somit val "None" ist. – Troskyvs