[Python-Dev] Lockstep iteration - eureka! (original) (raw)

Paul Prescod paul@prescod.net
Thu, 17 Aug 2000 08:57:08 -0400


Tim Peters wrote:

... > If you want a more efficient way to do it, it's available (just not as > syntactically beautiful -- same as range/xrangel). Which way would that be? I don't know of one, "efficient" either in the sense of runtime speed or of directness of expression.

One of the reasons for adding range literals was for efficiency.

So

for x in [:len(seq)]: ...

should be efficient.

The "loop index" isn't an accident of the way Python happens to implement "for" today, it's the very basis of Python's thing.getitem(i)/IndexError iteration protocol. Exposing it is natural, because it is natural.

I don't think of iterators as indexing in terms of numbers. Otherwise I could do this:

a={0:"zero",1:"one",2:"two",3:"three"} for i in a: ... print i ...

So from a Python user's point of view, for-looping has nothing to do with integers. From a Python class/module creator's point of view it does have to do with integers. I wouldn't be either surprised nor disappointed if that changed one day.

Sorry, but seq.keys() just makes me squirm. It's a little step down the Lispish path of making everything look the same. I don't want to see float.write() either .

You'll have to explain your squeamishness better if you expect us to channel you in the future. Why do I use the same syntax for indexing sequences and dictionaries and for deleting sequence and dictionary items? Is the rule: "syntax can work across types but method names should never be shared"?

-- Paul Prescod - Not encumbered by corporate consensus Simplicity does not precede complexity, but follows it. - http://www.cs.yale.edu/homes/perlis-alan/quotes.html