PEP-0234: Iterators

Neelakantan Krishnaswami neelk at alum.mit.edu
Fri Feb 16 16:49:28 CET 2001


I have a couple of comments about the iterators proposal. The need for
improving the iteration protocol has been apparent for a really long
time, and I'm really glad to see that a PEP for it has appeared.
However, in its current form I think that what the PEP proposes can be
simplified a bit.

You can get a simplification if the separate protocols for sequence
and mappings were combined, and an iterator was an object with methods
"current_index", "current_value", and "next_state". The "current
index" of a sequence would be the position in the list, and the
"current index" of a mapping would the key that yields that value.

So then a loop like:

for elt in coll:
   # Stuff

would be equivalent to:

iterator = coll.__iter__()
while 1:
    elt = iterator.current_value()

    # Stuff

    try:
        iterator = iterator.next_state()
    except IndexError:
        break

The "key:value" syntax could then be the same for mappings and
sequences:

for key:value in coll:
    # Stuff

iterator = coll.__iter__()
while 1:
    key = iterator.current_index()
    val = iterator.current_value()

    # Stuff

    try: 
	iterator = iterator.next_state()
    except IndexError:
	break

And similar variations (":value", "key:") would follow logically.


Neel



More information about the Python-list mailing list