On Tue, 2005-12-06 at 19:58 -0500, Raymond Hettinger wrote: > Any real-world use cases or compelling contrived examples? > > ISTM, that the code calling it.stop() would already be in position to > break-out of the iteration directly or set a termination flag. Instead > of: > > it = itertools.interruptable(iterable): > for x in it: > . . . > if cond(x): > it.stop() > > Why not write: > > for x in iterable: > . . . > if cond(x): > break > > If needed, the for-loop can have an else-clause for any processing > needed in the event of interruption. The idea was motivated by a case of nested loops, similar to: for x in iterable1: for y in iterable2: for z in iterable3: . . . if cond1(x): iterable1.stop() if cond2(y): iterable2.stop() if cond3(z): iterable3.stop() . . . It seemed more convenient at the time than having to deal with multiple termination flags, or breaks, or a combination thereof. The ability to remotely terminate a for-loop also struck me as somewhat interesting: def estimate(item, iterable): . . . if good_enough: iterable.stop() return result for x in iterable: . . . approx *= estimate(x, iterable) But these are highly contrived and hardly compelling. I was primarily interested in whether anyone recalls discussing the ability to prematurely terminate an iterator and whether there are any technical drawbacks other than it being redundant. Matthew Barnes
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4