newbie question

Jeff Shannon jeff at ccvcorp.com
Thu Feb 10 12:36:42 EST 2005


Dennis Lee Bieber wrote:

> On Wed, 09 Feb 2005 18:10:40 -0800, Jeff Shannon <jeff at ccvcorp.com>
> declaimed the following in comp.lang.python:
> 
> 
>>for i in range(n)[::-1]:
>>     func(n)
> 
> 
> 	Shouldn't that be
> 		func(i)
> (the loop index?)

You're right, that's what I *meant* to say.  (What, the interpreter 
doesn't have a "do what I mean" mode yet? ;) )

>>The '[::-1]' iterates over the range in a reverse (decreasing) 
>>direction; this may or may not be necessary depending on the 
>>circumstances.
> 
> 	Eeee.... sneaky... (I'm a bit behind on latest syntax additions)
> 
> 	I'd probably have coded something like
> 
> for n1 in range(n):
> 	func(n-n1)
> 
> though, and note that I do admit it here  [...]

Given a need/desire to avoid extended slicing (i.e. being stuck with 
an older Python, as I often am), I'd actually do this by changing the 
input to range(), i.e.

     for i in range(n, 0, -1):   # ...

That (IMO) makes the decreasing-integer sequence a bit clearer than 
doing subtraction in the function parameter list does.  Actually, it's 
possibly clearer than the extended slicing, too, so maybe this would 
be the better way all around... ;)

> I haven't done the detailed
> analysis to properly set the end point... 

And as Peter Hansen points out, none of the Python versions leave n in 
the same state that the C loop does, so that's one more way in which 
an exact translation is not really possible -- and (IMO again) further 
evidence that trying to do an exact translation would be 
ill-conceived.  Much better to consider the context in which the loop 
is used and do a looser, idiomatic translation.

Jeff Shannon
Technician/Programmer
Credit International




More information about the Python-list mailing list