This is a bit of a tangent, hopefully convergent, but hey, this is python-ideas:

Would there be interest in some kind of method/API for restarting iterators? If there was a it.restart() (or reset(it)), it would probably be a good idea to name the concept in the same way as the method ( "Restartable" or "Resettable"). And having that as an actual protocol would simplify the discussion on both what the type should contain and how it should be named, while having actal applications to simplify code (and reduce memory usage in cases when creating a list is not needed, just making multiple passes).

I'm not proposing one of those names in particular, discussing whether this concept makes sense and is useful should be before the naming

On Fri, Jul 22, 2016 at 3:44 AM, Stephan Hoyer <> wrote:
On Thu, Jul 21, 2016 at 9:04 PM, Guido van Rossum <> wrote:
If it really must be two words, how about SizedIterable? That suggests
it's a subclass of Sized and Iterable, which it is. Container doesn't
need separate mention, it's pretty obvious that any Iterable can
implement __contains__, and more people know that Iterable is an ABC
than Container.

In my experiments with type annotations, we recently encountered this exact same issue (variables for which either sets or lists should be valid). My initial solution was almost exactly what you propose here: we wrote a SizedIterable class, simply inheriting from Sized and Iterable.

Ultimately, we didn't find this very satisfying, because we realized that strings are SizedIterables (they're sequences, too), and we really didn't want to allow accidentally passing strings that would be interpreted as iterables of characters. Unfortunately, I don't think there's any good way in Python to specify "any sized iterable that isn't a string".

Python-ideas mailing list
Code of Conduct:

Daniel F. Moisset - UK Country Manager
Skype: @dmoisset