Hmm, here's an approach using the .throw() operation from PEP 342.
It's obviously untested, since that feature is not currently part of
Python, probably incorrect, and maybe just insane. I renamed "append"
to "insert_iterator" since "append" usually means put something at the
end, not in the middle.
from itertools import cycle
class InsertIterator(Exception): pass
def itergen(self, *iters):
while iters:
try:
for i,it in (enumerate(it) for it in cycle(iters)):
yield it.next()
except StopIteration:
del iters[i]
except InsertIterator, new_iterator:
# maybe the i here should be i+1?
iters = [new_iterator] + iters[i:] + iters[:i]
Now you can say
ig = itergen(it1,it2,...)
for x in ig:
....
and if you want to insert a new iterator, just say
ig.throw(InsertIterator, new_iterator)
--
http://mail.python.org/mailman/listinfo/python-list