表达式中的python赋值顺序

时间:2015-11-21 00:28:03

标签: python

# class defined here.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

# A function here.
def list_init(lst):
    if not lst:
        return None

    root = ListNode(lst[0])
    temp = root
    for i in range(1, len(lst)):
        temp.next = ListNode(lst[i]) #
        temp = temp.next # these two lines I want to simplify
    return root

当我将这两行简化为

temp = temp.next = ListNode(lst[i])

出错了,root.next为None。

这两种赋值表达方式有什么区别?

我认为它们是相同的,但结果并不相同。

但是,我将声明更改为

temp.next = temp = ListNode(lst[i])

结果是正确的,困惑的。

1 个答案:

答案 0 :(得分:1)

赋值语句将所有名称绑定到RHS上的同一对象。如果要正确处理多个对象,请使用元组解包

temp, temp.next = temp.next, ListNode(lst[i])