Python quirk in evaluation order

Robert Kern robert.kern at gmail.com
Fri Jul 31 16:31:21 EDT 2009


On 2009-07-31 15:11, James Stroud wrote:
> 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?

The right side of the assignment or the if-else expression? The "expr1 if 
condition else expr2" expression evaluates condition, then either expr1 or expr2 
depending on the result. The other expression is unevaluated.

 >>> a
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
 >>> b
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
 >>> 5 if True else b
5
 >>> a if False else 5
5

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list