PEP 308: A PEP Writer's Experience - CON

David Gausebeck gausebec-spam at paypal.com
Sat Feb 8 21:43:58 EST 2003


>In doing the PEP last time, I collected numerous proposed
>spellings. None were perfect -- here is each with it's
>weaknesses:
>
>     [3a] condition ? val1 : val2
>
>      + same as C, C++, and Java
>      - not readable (except to c/java programmers)
>      - uses punctuation in odd ways
>      - : is already overused
>
>     [3b] condition ? val1 ! val2
>      - still uses punctuation in odd ways
>      - still not readable
>
>     [3c] if condition then val1 else val2
>      + readable
>      - probably requires new keyword (perhaps "soft" keyword)
>      - ambiguity with if statement could make it hard to read
>      - ambiguity with if statement makes it impossible for
>          Python's parser
>
>     [3d] if condition: val1 else: val2
>      - overuse of :
>      - ambiguity with if statement could make it hard to read
>      - ambiguity with if statement makes it impossible for
>          Python's parser
>
>     [3e] if(condition) val1: val2
>      - overuse of :
>      - () already mean grouping and tuples, that's enough!
>      - already meaningful in python's current syntax
>
>     [3f] val1 when condition else val2
>      + reads like english
>      - new keyword
>      - condition evaluated first but is textually in middle
>
>     [3g] val1 if condition else val2
>      + reads like english
>      - condition evaluated first but is textually in middle
>
>If you throw out the unparsable, avoid innovative uses for
>punctuation that are difficult to read, and don't want to
>introduce a new keyword, you're left with [3g]. It's only
>real flaw is that condition appears in the middle, but
>nothing's perfect. That's why Guido's PEP 308 proposes [3g].

There are a couple more ideas that have come up in the PEP thread, and
there are two in particular that I like better than any in the above
list.  From Alan Daniels:

   condition ? val1 else val2

This is just another variant of [3a] and [3b], but it uses less
punctuation and is (IMO) more readable as a result.
>From Paul Rubin:

   <new keyword> condition: val1 else val2

this is like [3d] but without the ambiguity with if.  Of course, its
big disadvantage is the requirement of a new keyword.  The original
suggestion was for the keyword 'ifelse' or possibly 'select'.  I was
thinking 'when' could work, and my latest idea for it is 'case'.

A simple example of each looks like:

   x = y>0 ? y else 0
   x = case y>0: y else 0

-Dave




More information about the Python-list mailing list