"Gabriel Genellina" <gagsl-...@yahoo.com.ar> wrote: > En Mon, 21 Dec 2009 11:39:46 -0300, Lucas Prado Melo ><lukepada...@gmail.com> escribió: > >> Is there a way to send() information back to a generator while using the >> for...in statement? > > No. You have to write the iteration as a while loop. > You *can* use send() to a generator while using a for loop, but it's probably more effort than it's worth.
The caveats include: You have to construct the generator outside the loop so you can refer to it from inside the loop. The generator has to distinguish between the for loop iteration and additional values sent in. When using send() that call mustn't terminate the iteration (or if it does you have to be prepared to catch the StopIteration). Here's a silly example which counts up to some limit and each time yields double the current count but you can reset the counter using send(). >>> def doubler(n, limit): while n < limit: m = yield 2*n if m is not None: n = m yield "ok" else: n += 1 >>> d = doubler(1, 20) >>> for n in d: print n print "sent", n+3, d.send(n+3) 2 sent 5 ok 10 sent 13 ok 26 sent 29 ok >>> >>> for n in doubler(1, 20): print n 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 >>> -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list