Conditional operator in Python?
thp at cs.ucr.edu
thp at cs.ucr.edu
Tue Sep 4 09:24:13 CEST 2001
Mikael Olofsson <mikael at isy.liu.se> wrote:
: On 04-Sep-2001 thp at cs.ucr.edu wrote:
: > Terry Reedy <tjreedy at home.com> wrote:
: >
: > : <thp at cs.ucr.edu> wrote in message news:9n1hr7$7op$1 at glue.ucr.edu...
: > :> I hate writing:
: > :>
: > :> factorial = lambda x : (x<=1 and [1] or [x*factorial(x-1)])[0]
: >
: > : Since 1 != 0, quite dependably, you do not need to. try "x<=1 and 1 or
: > : x*factorial(x-1)"
: Interesting. If I were to write a factorial using a lambda, I would probably
: have written
: factorial = lambda x: reduce(lambda a,b:a*b,range(1,x+1))
: or
: import operator
: factorial = lambda x: reduce(operator.__mul__, range(1,x+1))
: Those two throw exceptions for non-positive input, which I prefer. But
: regrettably, they give rather stupid error messages.
Okay, factorial is a somewhat simplistic example. Consider the
following function, which counts the k-way partitions of n:
p = lambda k, n : (
( k < 1 or k > n ) and [0] or
( n == 1 or n == k ) and [1] or
[p(k-1,n-1)+p(k,n-k)]
)[0]
Using, say, ?: notation this would be written:
p = lambda k, n :
k < 1 or k > n ? 0 :
n == 1 or n == k ? 1 :
p( k-1, n-1 ) + p (k, n-k )
which seems much more concise and readable.
Tom Payne
More information about the Python-list
mailing list