Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何在一行上分配多个变量?_Python - Fatal编程技术网

Python如何在一行上分配多个变量?

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

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.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