palindrome iteration

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Aug 28 12:51:16 CEST 2010


On Sat, 28 Aug 2010 09:48:47 +0100, Ian wrote:

> On 27/08/2010 21:51, Jussi Piitulainen wrote:
>> Meanwhile, I have decided to prefer this:
>>
>> def palindromep(s):
>>      def reversed(s):
>>          return s[::-1]
>>      return s == reversed(s)
> I like this.

It's silly, needlessly complicated, and inefficient. Why create a *one 
line* nested function that only gets called once? Every single time you 
call the function, it has to create the inner function again, then call 
it once, then throw it away. Admittedly Python does recreate the inner 
function from pre-compiled parts, which is quick, but still, it doesn't 
gain you anything that a simple comment wouldn't give:

def palindromep(s):
    return s == s[::-1]  # Compare s to its reverse.


> s[::-1] is obscure and non-obvious, especially to Python noobs.

*Only* to Python noobs. Slicing is fundamental to Python, and using a 
slice of [::-1] to reverse something is a basic Python idiom.


> This makes it clear what is going on and why at a cost of very little
> code.
> 
> Very helpful to the maintenance programming in 18 months time!

Only if writing three lines when one would do is your definition of 
"helpful".




-- 
Steven



More information about the Python-list mailing list