On Sat, May 14, 2011 at 7:17 PM, Chris Angelico <ros...@gmail.com> wrote: > You're right. It needs a while loop instead of the if (and some slight > reordering): > > 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 > while sent is not None: > queue.append(sent) > sent=(yield None) # This is the return value from gen.send() > > That should work.
Yeah, that should do it. But this is so much easier to get right and to understand: import itertools class Ints(object): def __init__(self): self.ints = itertools.count() self.queue = [] def __iter__(self): return self def next(self): if self.queue: return self.queue.pop(0) else: return self.ints.next() def insert(self, x): self.queue.append(x) -- http://mail.python.org/mailman/listinfo/python-list