[Info] PEP 308 accepted - new conditional expressions

Ron Adam rrr at ronadam.com
Fri Sep 30 18:33:03 EDT 2005


Reinhold Birkenfeld wrote:

> Rocco Moretti wrote:
> 
>>Reinhold Birkenfeld wrote:
>>
>>>Hi,
>>>
>>>after Guido's pronouncement yesterday, in one of the next versions of Python
>>>there will be a conditional expression with the following syntax:
>>>
>>>X if C else Y
>>
>>Any word on chaining?
>>
>>That is, what would happen with the following constructs:
>>
>>A if B else C if D else F
>>A if B if C else D else F
>>
>>The first one is the tricky bit - it could be either
>>
>>(A if B else C) if D else F
>>or
>>A if B else (C if D else F)
>>
>>I'd expect the former from left-> right semantics, but reading the 
>>unparenthesized form, I'd see "A if B else ..." note that B is true, and 
>>conclude the expression evaluated to A (which would be wrong if D is false).
> 
> 
> It will be
> 
> A if B else (C if D else F)

So this evaluates as if there are parentheses around each section.. Hmm?

   (A) if (B) else ( (C) if (D) else (F) )

The first 'if' divided the expr, then each succeeding 'if' divides the 
sub expressions, etc...  ?

So ...

   A if B else C + X * Y

Would evaluate as... ?

   A if B else (C + X * Y)


and...

    value = X * Y + A if B else C

would be ?

    value = (X * Y + A) if B else C

or ?

    value = X * Y + (A if B else C)



I think I'm going to make it a habit to put parentheses around these 
things just as if they were required.

Cheers,
Ron





More information about the Python-list mailing list