def enumerate(gen): i = 0 for x in gen: yield i yield x i += 1 print list(enumerate("Hello")) def tee(gen1, gen2): gen2 = iter(gen2) for x1 in gen1: x2 = gen2.next() yield (x1, x2) #print list(tee("Hello!!", "World")) print tee("", "!!").next() def empty(): if False: yield None from py.magic import greenlet # ...