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

Roy Smith roy at panix.com
Sat Feb 8 18:32:57 EST 2003


mis6 at pitt.edu (Michele Simionato) wrote:

> Evan <evan at 4-am.com> wrote in message 
> news:<1gb1a.33499$yb.1988258 at twister.austin.rr.com>...
> > Here's a totally new direction: let's get rid of the chaining and 
> > precedence issues, and make an n-way conditional, not a ternary.
> > 
> > {if cond1: expr1, default}
> > {if cond1: expr1, cond2: expr2, default}
> > etc.
> > 
> > Obviously, comma precedence with the braces works the same way as in a 
> > literal dict.
> > 
> > Examples based on the thread of discussion:
> > 
> > x = {if a < 0: 'negative', a > 0: 'positive', 'zero'}
> > 
> > if {if callable(obj): obj(), alttest()}:
> > 
> > roots = [{if x > 0, sqrt(x), '?'} for x in l]
> > 
> > Cheers,
> > 
> > Evan @ 4-am
> 
> Not convincing. For multiple choices one should use a dictionary. I am 
> favorable
> to a ternary operator but against a "case" operator.
> 
>                      M.

This is getting a bit off the original issue, but I disagree that 
dictionaries can (in general) be used instead of case statements.  
Certainly, a dictionary can be used to pick one of several values, but 
it can't be used to select one of several code paths.  I'm not arguing 
that Python needs a case statement, just pointing out that dictionaries 
and case are not interchangable.

Of course, the OOP fanatics might argue that if you're using a case 
statement to select code paths, you probably wanted a subclass instead, 
but that's a whole different flame-war :-)




More information about the Python-list mailing list