Python: two "yield"s in one function -
we find interesting issue on yield of python. wrote simple program:
def f(): in range(5, 9): j in range(21, 29): x = yield y = (yield j) * 100 x += y print '>>>', x gen = f() next(gen) a1 = gen.send(66) a2 = gen.send(77) print a1 print a2 the result amazing:
>>> 7766 21 5 i=5, j=21 => yield => a1=21 => send(66) => x = 66
i=5, j=21 => yield j => a2=5 => send(77) => y = 7700
print 7766
print 21
print 5
i.e. after yield i, a1 gets value of j; after yield j, a2 gets value of i.
does know why yield this? why not a1=5, a2=21?
next(gen) takes first element generator (i):
next(gen) # 5 then gen.send(66) equal j (which 21). since second loop still working, subsequent gen.send(77) equal i (which still 5).
essentially, problem consume 3 values, instead of 2.
use gen.send(none) or next(gen) start generator:
a1 = gen.send(none) # or a1 = next(gen) a2 = gen.send(77) print(a1, a2) # prints 5 21
Comments
Post a Comment