Conditional expressions - PEP 308

Colin J. Williams cjw at sympatico.ca
Wed Jan 31 16:32:29 CET 2007


Paddy wrote:
> On Jan 30, 9:51 pm, "Colin J. Williams" <c... at sympatico.ca> wrote:
>> It would be helpful if the rules of the game were spelled out more clearly.
>>
>> The conditional expression is defined as X if C else Y.
>> We don't know the precedence of the "if" operator.  From the little test
>> below, it seem to have a lower precedence than "or".
>>
>> Thus, it is desirable for the user to put the conditional expression in
>> parentheses.
>>
>> Colin W.
>>
>> # condExpr.py
>> # PEP 308 defines a conditional expression as X if C else Y
>> # but we don't know exactly what X is supposed to be.
>> # It doesn't seem to be spelled out in the syntax.
>>
>> def main():
>>    names= ['abc', 'def', '_ghi', 'jkl', '_mno', 'pqrs']
>>    res= ''
>>    for w in names:
>>         res= res + w if w[0] != '_' else ''
>>         z= 1
>>    print 'res1:', res
>>
>>    res= ''
>>    for w in names:
>>         res= res + (w if w[0] != '_' else '')
>>         z= 1
>>    print 'res2:', res
>>
>> if __name__ == '__main__':
>>    main()
>>
>> Result:
>> [Dbg]>>>
>> res1: pqrs
>> res2: abcdefjklpqrs
> 
> But to give them credit though, in Whats new in Python 2.5: PEP 308,
> they do mention that as a matter of style you should parenthesise the
> if-expression, and the example given consistes of just a simple
> assignment of the if-expr to a name.
> - Paddy.
> 
Yes, I agree.  The ternary operator is a step forward.

I was trying to make the point that the parentheses are necessary if X 
is more than a simple value.  It's a pity that one finds this out by 
experiment rather than definition.

Colin W.




More information about the Python-list mailing list