How does this chain assignment work?

前端 未结 3 1364
北海茫月
北海茫月 2021-01-20 03:57

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]

相关标签:
3条回答
  • 2021-01-20 04:39

    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.

    0 讨论(0)
  • 2021-01-20 04:46

    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

    0 讨论(0)
  • 2021-01-20 04:54

    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
    
    0 讨论(0)
提交回复
热议问题