Ich lerne Coroutine, ich habe ein PDF mit dem Namen "Ein neugieriger Kurs über Coroutines und Concurrecy" gefunden. Es ist ein flockiges Beispiel:Python, warum bekomme ich ein unterschiedliches Ergebnis zwischen .py und shell, wenn ich Generatorertrag verwende?
def countdown(n):
print("Counting down from", n)
while n >= 0:
newvalue = (yield n)
# If a new value got sent in, reset n with it
if newvalue is not None:
n = newvalue
else:
n -= 1
ich es in einer Datei "bogus.py" genannt gesetzt haben, dann ging ich in die Python-Shell ..
>>> from bogus import countdown
>>> c = countdown(5)
>>> for n in c:
... print(n)
... if n == 5:
... c.send(3)
...
Counting down from 5
5
3
2
1
0
>>>
Ja, ich habe 5 3 2 1 0 ... Aber wenn ich diese Aussagen in die bogus.py setzte, bekam ich das andere Ergebnis ...
def countdown(n):
print("Counting down from", n)
while n >= 0:
newvalue = (yield n)
# If a new value got sent in, reset n with it
if newvalue is not None:
n = newvalue
else:
n -= 1
c = countdown(5)
for n in c:
print(n)
if n == 5:
c.send(3)
dann ...
$ python bogus.py
Counting down from 5
5
2
1
0
Ich habe 5 2 1 0 ...! Wo ist die 3? Ich bin so verwirrt, und ich wirklich nicht kwow warum ... Bitte helfen Sie mir, und Entschuldigung für mein Englisch.
oh, finde ich auch, wenn ich ein wenig in Shell-Code geändert, dann bekam ich:
>>> from bogus import countdown
>>> c = countdown(5)
>>> for n in c:
... print(n)
... if n == 5:
... k = c.send(3)
...
Counting down from 5
5
2
1
0
>>>