For review: PEP 308 - If-then-else expression

sismex01 at hebmex.com sismex01 at hebmex.com
Fri Feb 28 16:06:29 CET 2003


> From: Chermside, Michael [mailto:mchermside at ingdirect.com]
> Sent: Friday, February 28, 2003 7:25 AM
> 
> Janto writes:
> > Geoff> What about ifelse(condition, then clause[, else clause])? 
> > 
> > I find it difficult to imagine a situation where the short-circuit
> > behavior actually matters. Theoretically an ifelse function 
> > doesn't do the same thing, but practically it does: Whenever I've
> > used ternary ops there weren't any side effects to evaluating both
> > arguments.  Neither any performance ones.
> > 
> > Can someone give me a real world example of its usefulness?
> 
> Simple example:
> 
>     print ifelse(y==0, x/y, "undefined")
> 
> In fact, it is QUITE COMMON to use a conditional expression as a
> "guard"... checking for a special case in which the general formula
> would break. Another example would be:
> 
>     y = ifelse( x is None, None, func(x) )
> 
> Either of these would, of course, not work without short-circuiting /
> lazy evaluation.
> 
> -- Michael Chermside
>

I've *had* to use VBasic to work on some stuff, and it has an iff()
function, kinda like your ifelse().  It's utterly useless.  The reason
it's useless is because it doesn't short-circuit.

So your example above, in VB, would be:

   q = iff(y <> 0, x/y, 0)

would fail miserably, because x/y would be evaluated even if y==0,
which is NOT aparent upon reading the function description.

:-/

Another strike agains M$ language designers. :-P

-gus





More information about the Python-list mailing list