[Python-Dev] Short-circuiting iterators

Edward Loper edloper at gradient.cis.upenn.edu
Wed Nov 30 20:36:54 CET 2005


> I had an idea this morning for a simple extension to Python's iterator
> protocol that would allow the user to force an iterator to raise
> StopIteration on the next call to next(). My thought was to add a new
> method to iterators called stop().

There's no need to change the iterator protocol for your example use 
case; you could just define a simple iterator-wrapper:
class InterruptableIterator:
 stopped = False
 def __init__(self, iter):
 self.iter = iter()
 def next(self):
 if stopped:
 raise StopIteration('iterator stopped.')
 return self.iter.next()
 def stop(self):
 self.stopped = True
And then just replace:
> generator = some_generator_function()
with:
 generator = InterruptableIterator(some_generator_function())
-Edward


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /