James Stroud wrote:
<div class="moz-text-flowed" style="font-family: -moz-fixed">Python 2.5:

mbi136-176 211% python
*** Pasting of code with ">>>" or "..." has been enabled.
########################################################################
 ##                             ipython                              ##
########################################################################
py> b = 4 if True else b
py> b
4


Isn't the right side supposed to be evaluated first?


I don't have a clue what value you expected b to have. The if/else ternary expression is roughly equivalent to:
             if True:
                   b = 4
             else
                   b = b
The first part to be evaluated is the if expression, which is hard-coded to True. Then the part to the left will be used for the expression result, and the part on the right ignored. This is because of short-circuit rules.

Try this one for size:
b = 22 if True else  I.am.Not.Being.Evaluated(4.4)

The else clause does need to be a syntactically valid expression, but it's not evaluated unless the if-expression is false.

DaveA


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to