为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村225694 2021-06-01 13:52:52
Python 在一行中分配多个变量的实际步骤是什么?我过去经常做 A[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, nodeself.next变得node比我预期的要早,所以分配变成self.next, node.next = node, node     但是,如果我这样做self.next.prev, self.next = node, node有用!我“假设”的步骤是1. cache values at the right side2. assign to left side one by one, left to right不是1. cache values at the right side2. cache the ref at the left side2. assign to ref one by one, left to right那么,有哪些步骤呢?
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

Python中有一种叫做“扩展赋值”的东西。


长话短说,您可以通过赋值来扩展迭代。例如,这段代码计算并展开右侧,实际上是一个元组,并将其分配给左侧:


a, b = 3, 5

或者


tup = (3, 5)

a, b = tup

这意味着在 Python 中,您可以用一行交换两个变量:


a, b = b, a

它评估右侧,创建一个 tuple (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

此分配是并行的,node.next并且node.prev不“重叠”。但是对于下一行:


self.next, self.next.prev = node, node

由于self.next.prev取决于self.next,它们“重叠”,因此self.next首先分配。


查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 279 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信