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