[Python-Dev] Re: Single- vs. Multi-pass iterability

Alex Martelli aleax@aleax.it
Fri, 19 Jul 2002 08:16:34 +0200

On Friday 19 July 2002 12:26 am, Tim Peters wrote:
> > What about:
> >
> >     "...sequences.  Note that the act of looking at an iterator's
> >     elements mutates the iterator."
> That doesn't belong in the spec either -- nothing requires an iterator to
> have mutable state, let alone to mutate it when next() is called.

Right, for unbounded iterators returning constant values, such as:

class Ones:
    def __iter__(self): return self
    def next(self): return 1

However, such "exceptions that prove the rule" are rare enough that I
wouldn't consider their existence as forbidding to say _anything_ about
state mutation.  I _would_ similarly say that x[y]=z normally mutates x,
even though "del __setitem__(self, key): pass" is quite legal.  Inserting
an adverb such as "generally" or "usually" should suffice to make even
the most grizzled sea lawyer happy while keeping the information in.