Consider the following code; it is a bad programming practice. I am wondering why the resulting list A
is [1, 1, 3]
rather than [1, 2, 1]
Haha... The python evaluation of such expression in not as obvious as you may expect from the t = A[t] = A.count(3)
expression. In first step the value at the end is evaluated with is 1
. Then it is first assigned to t
and then to A[t]
, but at this time t
is 1.
Suggestion by @Henrik to read about chained assignments is very good.
Actually, your example self-explain why it is perceived as bad programming practice.
On line 3 you have a chained assignment
t = A[t] = A.count(3)
t = A.count(3)
is evaluated first – t
set to the return value of A.count(3)
which in this case is 1.
Then the member of A
at index t
(=1) is set to the return value of A.count(3)
, which is still 1.
Read more about chained assignments in Python here
A.count(3)
yields 1
.
t = 1
is executed first. Now t
is 1
.
A[t] = 1
is executed. (A[1] = 1
)
>>> class Demo:
... def __setitem__(self, idx, value):
... print 'Set index', idx
...
>>> d = Demo()
>>> d[1] = d[2] = 2
Set index 1
Set index 2