Conditional operator in Python?

Alex Martelli aleax at aleax.it
Tue Sep 4 04:07:53 EDT 2001


"Weet Vanniks" <Weet.Vanniks at el_simpatico.be> wrote in message
news:3B947E32.C5604328 at el_simpatico.be...
> What about :
>
> def cond_choose(cond,first_choice,second_choice):
>      if cond:
>           return first_choice
>      return second_choice
>
> whatever= cond_choose(x,a,b)
>
> This seems much cleaner to me than all those contorsions with the syntax.

It is, but it has entirely different semantics: BOTH a
and b are FULLY evaluated BEFORE one of them is chosen.

This is totally inappropriate for many uses of 'choice',
such as guarding against incorrect operations, controlling
recursion, and so on.

E.g.:

    result = cond_choose(x, 23/x, 149)

this tries to compute 23/x even when x is zero.  This is NOT
the correct semantics for conditional-choice.  Any of
the alternative approaches, such as:
    result = (x and 23/x) or 149
WILL behave correctly: since and/or "short-circuit", the
right-hand-side operand is *NOT* evaluated -- the division
by zero will not happen with this coding.


Alex






More information about the Python-list mailing list