[Python-ideas] Introduce collections.Reiterable

Neil Girdhar mistersheik at gmail.com
Sat Sep 21 00:02:34 CEST 2013


On Fri, Sep 20, 2013 at 12:53 PM, Stephen J. Turnbull <stephen at xemacs.org>wrote:

> Neil Girdhar writes:
>
>  > Many different solutions would fix the problems I've seen.  My
>  > suggestion is that Reiterable should be define as an iteratable for
>  > which calling the __iter__ method yields the same elements in the
>  > same order irrespective of whether __iter__ is called while a
>  > previously returned iterator is still iterating.
>
>  > Correct me if I'm wrong, but views on dicts are reiterable.
>
> For the same reason that sequences are: a view is not an iterator, so
> every time you iterate it, it gets passed to iter, and you get a new
> iterator, which then iterates.
>
> This is *why* Nick says that "isinstance(x, Iterable) and not
> isinstance(x, Iterator)" is the test you want.  I can't speak for Nick
> on Steven A's example of an object with a __getitem__ taking a numeric
> argument that isn't an Iterable but is iterable, but I think that
> falls under "consenting adults" aka "if you're afraid it will hurt,
> don't".
>
>
I want that test if the documentation will promise that that test is
supposed to be right.


>   > Your second point that the method should be able to cheaply clone
>  > an iterator cheaply is precisely what I'd like to achieve with a
>  > "Reiterator" class like Antoine's.
>
> Well, I've kinda convinced myself that it isn't going to be easy to do
> that, without changing the type.  The problem is that __next__ is
> (abstractly) a closure, and there's no way I know of to copy a
> function (copy.copy just returns the function object unchanged).  So
> you'd need to expose the hidden state in the closure, and that is a
> change of type.
>
>  > It sounds like you're saying put the items into a list no matter
>  > what.
>
> No, I'm saying if you don't know if you may consume the iterable, you
> should convert to iterator, clone the iterator, and iterate the
> clone.  But that probably requires a change of type, at which point
> you may as well call it "Reiterable".
>
>
> okay, so we're on the same page it sounds like.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130920/ea23e7e1/attachment.html>


More information about the Python-ideas mailing list