Re: [Python-Dev] Rationale behind lazy map/filter

2015年10月13日 16:31:18 -0700

On Tue, Oct 13, 2015 at 11:26:09AM -0400, Random832 wrote:
> "R. David Murray" <[email protected]> writes:
> 
> > On 2015年10月13日 14:59:56 +0300, Stefan Mihaila
> > <[email protected]> wrote:
> >> Maybe it's just python2 habits, but I assume I'm not the only one
> >> carelessly thinking that "iterating over an input a second time will 
> >> result in the same thing as the first time (or raise an error)".
> >
> > This is the way iterators have always worked.
> 
> It does raise the question though of what working code it would actually
> break to have "exhausted" iterators raise an error if you try to iterate
> them again rather than silently yield no items.
Anything which looks like this:
for item in iterator:
 if condition: 
 break
 do_this()
...
for item in iterator:
 do_that()
If the condition is never true, the iterator is completely processed by 
the first loop, and the second loop is a no-op by design.
I don't know how common it is, but I've written code like that.
Had we been designing the iterator protocol from scratch, perhaps we 
might have had two exceptions:
class EmptyIterator(Exception): ...
class StopIteration(EmptyIterator): ...
and have StopIteration only raised the first time you call next() on an 
empty iterator. But would it have been better? I don't know. I suspect 
not. I think that although it might avoid a certain class of errors, it 
would add complexity to other situations which are currently simple.
-- 
Steve
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to