Leif K-Brooks said:
Is there a word for an iterable object which isn't also an iterator, and
therefor can be iterated over multiple times without being exhausted?
"Sequence" is close, but a non-iterator iterable could technically
provide an __iter__ method without implementing the sequence protocol,
so it's not quite right.
"reiterable". I think I was the first to use this word on
comp.lang.python.
If you have code that requires this property might want to use this
function:
..def reiter(x):
.. i = iter(x)
.. if i is x:
.. raise TypeError, "Object is not re-iterable"
.. return i
example:
..for outer in x:
.. for inner in reiter(y):
.. do_something_with(outer, inner)
This will raise an exception when an iterator is used for y instead of
silently failing after the first time through the outer loop and
making it look like an empty container.
When iter() returns a new iterator object it is a good hint but not a
100% guarantee that the object is reiterable. For example, python 2.2
returned a new xreadlines object for iterating over a file but it
messed up the underlying file object's state so it still wasn't
reiterable. But when iter() returns the same object - well, that's a
sign that the object is definitely not reiterable.
Oren