Siehe die Konsolensitzung unter:Warum sendet der Generator Methoden-Druckergebnisse ohne Aufruf der Druckfunktion an den Bildschirm?
>>> def f(x):
... for _ in range(10):
... y = yield
... x.append(y)
... yield x
...
>>> x = []
>>> g = f(x)
>>> for _ in g:
... g.send(1)
...
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
beachten, dass das Verfahren den Generator .send()
Ausgabe auf den Bildschirm zu bedruckenden verursacht. Ich glaube, es ist die .send()
Methode verursacht, weil, wenn die Generator-Ausgabe None
ist, dann nichts auf den Bildschirm gedruckt wird (was der übliche Fall mit None
ist).
>>> x = []
>>> g = f(x)
>>> for i in g:
... g.send(1)
...
>>> x
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Außerdem, wenn wir durchlaufen gerade ohne jede Eingabe zu senden, gibt es nichts auf dem Bildschirm ausgegeben wird (tritt mit jeder Version von f
oben):
>>> x = []
>>> g = f(x)
>>> for i in g:
... pass
...
>>>
Kann jemand erklären, warum diese Ausgabe tut auf den Bildschirm passiert? Ich denke, dass hier etwas Interessantes vor sich geht, aber ich weiß nicht, was es ist.
Um zu klären, ich vermute es hier nichts kompliziert los ist als das, was passiert, wenn Sie dies tun:
>>> []
[]
Die Konsole nur ist das Ergebnis eines Ausdrucks zu wiederholen. Aber warum verhält sich die Konsole so, als ob im obigen Fall ein wiederholter Ausdruckseintrag stattgefunden hätte?
Minimal Beispiel: '>> > während True: 0' –
@JoshLee das erklärt alles. und zum Glück wusste ich es besser als es zu tun. :) –