Evaluation order

Terry Reedy tjreedy at udel.edu
Fri Jul 10 14:27:35 CEST 2015

On 7/10/2015 8:04 AM, candide wrote:
> Le vendredi 10 juillet 2015 04:02:56 UTC+2, Chris Angelico a écrit :
>> I'm not sure what contradiction you're referring to, here. The
>> evaluation that you're pointing out says, as Terry showed via the
>> disassembly, that Python's first action is to look up the name 't' and
>> grab a reference to whatever object it points to.
> But in order to perform an operation, the interpreter has to evaluate
 > the operands and "evaluating" is not "grabbing a reference to".

In the CPython, evaluating a name is implemented as getting the 
reference corresponding to the name.

>> The execution of
>> t.sort() has to happen before the multiplication, because of the
>> parentheses.

> Official docs explains what evaluation is :
> When the name is bound to an object, evaluation of the atom yields that object.

Conceptually, that is exactly right.  How that is implemented on a 
computer in CPython is to load the address on the top of the virtual 
machine stack.

> So, since the Python interpreter is performing evaluation from left to right,
 > the first operand of the expression :
> t*(1+int(bool(t.sort())))
> evaluates to [2020, 42, 2015].

't' evaluates to the ***mutable*** list that 't' is bound to.

>  Next, the second operatand evaluates to the integer 1.

And in the process of that evaluation, the list is sorted.

Terry Jan Reedy

More information about the Python-list mailing list