On Sun, May 15, 2011 at 10:08 AM, Victor Eijkhout <s...@sig.for.address> wrote: > yield i
> r = gen.send(2) When you send() something to a generator, it becomes the return value of the yield expression. See the example here: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features For what you're doing, there's a little complexity. If I understand, you want send() to be like an ungetc call... you could do that like this: def ints(): i=0 while True: sent=(yield i) if sent is not None: yield None # This becomes the return value from gen.send() yield sent # This is the next value yielded i += 1 This lets you insert at most one value per iteration. Supporting more than one insertion is more complicated, but changing the loop structure entirely may help: def ints(): i=0 queue=[] while True: if queue: # see other thread, this IS legal and pythonic and quite sensible sent=(yield queue.pop(0)) else: sent=(yield i) i+=1 if sent is not None: yield None # This is the return value from gen.send() queue.append(sent) With this generator, you maintain a queue of sent values (if you want it to be a LIFO stack rather than a FIFO queue, just change the pop(0) to just pop()), and if the queue's empty, it produces sequential integers. (Incidentally, the sent values don't have to be integers. I leave it to you to decide whether that's any use or not.) Hope that helps! Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list