which is more 'pythonic' / 'better' ?

Peter Hansen peter at engcorp.com
Tue Sep 13 17:48:27 EDT 2005


Ken Seehart wrote:
> Will McGugan wrote:
>> I would actualy use the following for this particular case..
>>
>> text = line[n:n+1] or 'nothing'

> Hey are you a perl programmer?  That looks perlish to me.  A python 
> programmer would never use "or" that way (even though it works).  :)

I don't think that's at all true.  The pattern "somevalue or default" is 
an accepted idiom for returning a default value when "somevalue" is 
False, often used inside __init__ methods to set up attributes.  A most 
common case is like this (inside a class obviously):

def meth(self, things=None):
     self.things = things or []

(The reason you don't just use a keyword argument of "things=[]" should 
be obvious to all but newbies, and they'll learn a lot by researching 
why so I won't say here. ;-)  )

The alternative is fine too, but insisting on it would be pedantic, and 
if you have more than one of these it is definitely less readable (and, 
therefore, not Pythonic):

def meth(self, things=None):
     if things:
         self.things = things
     else:
         self.things = []

> It's okay, I used to be a perl programmer too.  It's nothing to be 
> ashamed of. :)

Ah, now I would disagree with that as well! ;-)

-Peter



More information about the Python-list mailing list