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


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

Reply via email to