Python如何在一行上分配多个变量?
Python在一行中分配多个变量的实际步骤是什么 我过去常常做[0],A[1]=A[1],A[0]来交换,但最近我在分配链表时遇到了一个错误Python如何在一行上分配多个变量?,python,Python,Python在一行中分配多个变量的实际步骤是什么 我过去常常做[0],A[1]=A[1],A[0]来交换,但最近我在分配链表时遇到了一个错误 # insert self->node->... def insert_next(self, node): node.next, node.prev = self.next, self self.next, self.next.prev = node, node self.next变为节点比我预期的早,因此赋值变为 self.nex
# insert self->node->...
def insert_next(self, node):
node.next, node.prev = self.next, self
self.next, self.next.prev = node, node
self.next
变为节点
比我预期的早,因此赋值变为
self.next, node.next = node, node
然而,如果我这样做
self.next.prev, self.next = node, node
它起作用了
我“假设”这些步骤是
1. cache values at the right side
2. assign to left side one by one, left to right
不是
那么,步骤是什么呢?在Python中有一种叫做“扩展分配”的东西
长话短说,你可以通过赋值来扩展一个iterable。例如,此代码计算并展开右侧(实际上是一个元组),并将其分配给左侧:
a, b = 3, 5
或
这意味着在Python中,可以用一行交换两个变量:
a, b = b, a
它计算右侧,创建一个元组(b,a)
,然后展开元组并分配给左侧
有一条特殊规则,如果任何左侧变量“重叠”,赋值将从左向右
i = 0
l = [1, 3, 5, 7]
i, l[i] = 2, 0 # l == [1, 3, 0, 7] instead of [0, 3, 5, 7]
所以在你的代码中
node.next, node.prev = self.next, self
此分配是并行的,因为节点。next
和节点。prev
不“重叠”。但对于下一行:
self.next, self.next.prev = node, node
由于
self.next.prev
依赖于self.next
,因此它们“重叠”,因此首先分配self.next
。这是一件值得学习的事情。你有文档的链接吗?这样我可以更深入地挖掘吗?@iBug这是金子。我应该可以给你金子。
node.next, node.prev = self.next, self
self.next, self.next.prev = node, node