[Python-Dev] Single- vs. Multi-pass iterability
Oren Tirosh
oren-py-d@hishome.net
Fri, 12 Jul 2002 07:01:13 -0400
On Fri, Jul 12, 2002 at 06:22:05AM -0400, David Abrahams wrote:
> Oren,
>
> I like the direction this is going in, but I have some reservations about
> any protocol which requires users to avoid using a simple method name like
> next() on their own multi-pass sequence types unless they intend their
> sequence to be treated as single-pass.
I'm not too thrilled about it, either, but I don't think it's too bad. If
you implement an object with an __iter__ method you must be aware of the
iteration protocol and the next method. If you put a next method on an
iterable you are most probably confusing iterators and iterables and not
just using the name 'next' for some other innocent purpose.
> One other possibility: if x.__iter__() is x, it's a single-pass sequence. I
> realize this involves actually invoking the __iter__ method and conjuring
> up a new iterator, but that's generally a lightweight operation...
I think it is critical that all protocols should be defined by something
passive like presence of attributes and attributes of attributes and not by
active probing. I don't see how a future typing system could be retrofitted
to Python otherwise (pssst, don't tell anyone, but I'm working on such a
system...)
Oren