[Python-ideas] Introduce collections.Reiterable

Neil Girdhar mistersheik at gmail.com
Thu Sep 19 11:38:30 CEST 2013


First of all, that's amazing and exactly what I was looking for.

Second, sorry Nick, I guess we were talking past each other and I didn't
understand what you were getting at.  From the collections.abc
documentation, I imagined that subclasses are more restricted and therefore
can do more than their superclasses.  However, as you were trying to tell
me things that are "Iterators" (and thus also Iterable) can do *less* than
things that are merely Iterable.  The former cannot be iterated over twice.
  If I'm understanding this correctly, would it be nice if the
documentation then made this promise (as I don't believe it does)?

Best,

Neil


On Thu, Sep 19, 2013 at 5:30 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:

> Le Thu, 19 Sep 2013 04:59:35 -0400,
> Neil Girdhar <mistersheik at gmail.com> a
> écrit :
> > Well, generators are iterable, but if you write a function like:
> >
> > def f(s):
> >      for x in s:
> >              do_something(x)
> >      for x in s:
> >              do_something_else(x)
> >
> > x should not be a generator.  I am proposing adding a function to
> > itertools like auto_reiterable that would take s and give you an
> > reiterable in the most efficient way possible.
>
> Try the following:
>
>
> import collections
> import itertools
>
>
> class Reiterable:
>
>     def __init__(self, it):
>         self.need_cloning = isinstance(it, collections.Iterator)
>         assert self.need_cloning or isinstance(it, collections.Iterable)
>         self.master = it
>
>     def __iter__(self):
>         if self.need_cloning:
>             self.master, it = itertools.tee(self.master)
>             return it
>         else:
>             return iter(self.master)
>
> def gen():
>     yield from "ghi"
>
> for arg in ("abc", iter("def"), gen()):
>     it = Reiterable(arg)
>     print(list(it))
>     print(list(it))
>     print(list(it))
>
>
> I don't know if that would be useful as part of the stdlib.
>
> Regards
>
> Antoine.
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
>
> --
>
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "python-ideas" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/python-ideas/OumiLGDwRWA/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> python-ideas+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130919/8d941474/attachment-0001.html>


More information about the Python-ideas mailing list