Lambdaizing Python Code

Fernando Pérez fperez528 at yahoo.com
Sat Sep 28 21:15:38 EDT 2002


Terry Hancock wrote:

> 
> Not that I want to sign up for the style police or
> anything, but ...
> 
> Would respectfully like to point out that this could
> as well be represented:
> 
> def plur(word, number):
>     if number > 1:
>         word = word + 's'
>     return '%d %s' % (number, word)

Well, not quite. You need 'if number !=1'. Otherwise this happens:
In [36]: plur('cat',0)
Out[36]: '0 cat'

when you want:

In [37]: plur0('cat',0)
Out[37]: '0 cats'

Anyway, I know that the above is equivalent to my lambda. I just like and 
often use lambda for quick, simple one-liners. The page originally referred 
to by the OP is a nightmare, and a funny example of abusing the lambda idea 
to death. But I don't mind them in simple cases, nor do I  find them 
particularly unreadable.

My original:

plur=lambda s,n:'%s %s' % (n,s+('','s')[n!=1])

is fine for me. I see exactly what it does in one pass of my eyes. That's why 
_I_ like lambdas, and where I use them. But this is absolutely a matter of 
_personal_ preference.

I'm a big defender of code clarity and readability over conciseness/cleverness 
(I'm an ex-perler, for good reason). It's just that in cases like the above, 
_I_ find the lambda form quicker to visualize mentally and overall simpler to 
my taste. Feel free to differ.

Cheers,

f.



More information about the Python-list mailing list