Conditional expressions - PEP 308
Colin J. Williams
cjw at sympatico.ca
Wed Jan 31 10:32:29 EST 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