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