Leif K-Brooks <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>...
> 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
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to