[Python-Dev] Re: PEP 279

David Ascher DavidA@ActiveState.com
Mon, 01 Apr 2002 21:24:54 -0800


Guido van Rossum wrote:

> So now I'd like to choose between enumerate() and indexer().  Any
> closing arguments?

A few thoughts:

  + the nice thing about enumerate is that it has the word 'number' in
it.
  - it is not obvious to me at first blush that 'enumerating' and
'iterating' elicit different 'first-guess semantics'
  - The first meaning I'd guess for enumerate(foo) would be
range(len(foo)).  

One reason I suggested 'indexer' is that the tuples (index, element) are
what I think of as an index entry -- it's a pair of (key, the element
being located)

A problem with indexer that I just realized is that indexer(dictionary)
does return (number, value) pairs, while one might reasonably expect it
to generate the same thing as dictionary.iteritems().

	>>> print d
	{'y': 'foo', 'x': 123, 'z': 1j}
	>>> for (k,v) in indexer(d):
	...   print k, v
	...
	0 y
	1 x
	2 z
	>>> for (k,v) in d.iteritems():
	...   print k, v
	...
	y foo
	x 123
	z 1j
	>>> for (k,v) in enumerate(d):
	...   print k, v
	...
	0 y
	1 x
	2 z

Actually, having the function return the dictionary _keys_ as the second
element in the tuple is a little weird.  But I guess that's just the
consequence of the earlier choice w.r.t. iter(dict).

All things considered, even though I suggested 'indexer()', I'm voting
for 'enumerate()' because of the numeric focus as opposed to a 'key'
focus.

--da