For review: PEP 308 - If-then-else expression
Anders J. Munch
andersjm at inbound.dk
Sat Feb 8 13:02:57 EST 2003
> Guido van Rossum <guido at python.org> writes:
> > The proposed syntax is as follows:
> >
> > <expression1> if <condition> else <expression2>
The order of evaluation of this is middle-then-left-or-right.
Also, I keep misreading "A if B else C" as
<condition> if <if-value> else <else-value>
-0.5 on this specific syntax.
PEP> if <condition> : <expression1> else: <expression2>
PEP> is even more confusing because it resembles the if statement so
PEP> much.
Ah, but I have a fix in store for that from the last time this was
discussed: Require parens around the expression.
Add to the grammar:
if_expr_list ::=
if_expr ( "," if_expr )* [","]
if_expr ::=
"if" comparison ":" if_expr "else" ":" if_expr
| expression
and replace expression_list with if_expr_list in parenth_form, and
perhaps also in string_conversion and subscription, but not in
assignment_stmt, return_stmt, yield_stmt etc.
Thus
x = (if A: B else: C) # legal
x[if A: B else: C] = D # perhaps legal, or perhaps you need
x[(if A: B else: C)] = D # legal
print `if A: B else: C` # perhaps legal
f(if A: B else: C, D) # legal, D is the second argument to f
x = if A: B else: C # ILLEGAL
if if A: B else: C: # VERY ILLEGAL
if (if A: B else: C): # legal
I think requiring parens like this would be a good idea with all
syntaxes, lest we want to see
if A if B if C else D else E:
- Anders
More information about the Python-list
mailing list