writable iterators?

Neal Becker ndbecker2 at gmail.com
Wed Jun 22 19:10:39 EDT 2011


Steven D'Aprano wrote:

> On Wed, 22 Jun 2011 15:28:23 -0400, Neal Becker wrote:
> 
>> AFAICT, the python iterator concept only supports readable iterators,
>> not write. Is this true?
>> 
>> for example:
>> 
>> for e in sequence:
>>   do something that reads e
>>   e = blah # will do nothing
>> 
>> I believe this is not a limitation on the for loop, but a limitation on
>> the python iterator concept.  Is this correct?
> 
> Have you tried it? "e = blah" certainly does not "do nothing", regardless
> of whether you are in a for loop or not. It binds the name e to the value
> blah.
> 

Yes, I understand that e = blah just rebinds e.  I did not mean this as an 
example of working code.  I meant to say, does Python have any idiom that allows 
iteration over a sequence such that the elements can be assigned?

...
> * iterators are lazy sequences, and cannot be changed because there's
> nothing to change (they don't store their values anywhere, but calculate
> them one by one on demand and then immediately forget that value);
> 
> * immutable sequences, like tuples, are immutable and cannot be changed
> because that's what immutable means;
> 
> * mutable sequences like lists can be changed. The standard idiom for
> that is to use enumerate:
> 
> for i, e in enumerate(seq):
>     seq[i] = e + 42
> 
> 
AFAIK, the above is the only python idiom that allows iteration over a sequence 
such that you can write to the sequence.  And THAT is the problem.  In many 
cases, indexing is much less efficient than iteration.




More information about the Python-list mailing list