当前位置: 首页 > 面试题库 >

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

洪捷
2023-03-14
问题内容

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, node

self.next变得node早于我的预期,所以分配成为

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

1. cache values at the right side
2. cache the ref at the left side
2. assign to ref one by one, left to right

那么,这些步骤是什么?


问题答案:

Python中有一种叫做“扩展分配”的东西。

长话短说,您可以通过任务扩展迭代。例如,以下代码评估并扩展右侧(实际上是一个元组)并将其分配给左侧:

a, b = 3, 5

要么

tup = (3, 5)
a, b = tup

这意味着在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

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

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

作为self.next.prev依赖于self.next,它们“重叠”,从而self.next首先被分配。



 类似资料:
  • 问题内容: Python如何将多个变量与一个值进行比较?,例如: 我希望返回一个列表: 问题答案: 方法1 方法2 使用元组或列表 方法3 最好是使用set集合

  • 因此,我昨天开始了一个问题:基于同一行中的值的多个pandas赋值,我想知道如何对一行数据进行排序,并将排序分配给同一行中的不同列。我已经按照Ed Chum的建议解决了这个问题:如何一次将一个函数应用于pandas数据帧中的多个列。 它确实起作用了,但我注意到我在这一过程中创建了错误的列。一旦我修复了这个bug,它就不再工作了。。。。 因此,我尝试在一个玩具示例上重现这个问题,但在玩具示例上也不起

  • 问题内容: 好的。所以我的问题很简单:如何在Python中使用eval分配变量的值?我试过了,但是那行不通。它返回一个SyntaxError。为什么不起作用? 问题答案: 因为是语句,而不是表达式。使用运行语句。 顺便说一下,有许多方法可以避免使用/,如果您只需要分配一个动态名称,例如可以使用字典,函数, 或 字典 : 更新 :尽管上面的代码在REPL中可以使用,但在函数内部则无法使用。如果没有其

  • 各位早上好,我正在创建一个产品销售系统,这个话题会有点长,因为我想好好解释一下。 正在用Vaadin+MySQL+springboot+Maven开发的系统 在主屏幕上,我们有一个网格,上面有“新建”、“更改”和“删除”按钮: 当点击new按钮时,将打开一个窗口,开始“销售”产品: 这里的问题是这样的,当我点击“+项”时会出现以下情况: 问题:创建了一个滚动条(在窗口的右边),保存、关闭和+项按钮

  • 问题内容: 我在Javascript中有一组全局计数器变量: 等等 然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。 我希望它如何工作的示例,但当然根本不起作用: 我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。 编辑说明: 我不是要增加计数器的名称,而是要增加计数器包含的

  • 问题内容: 我有: 我想把这些陈述变成几句话。 问题答案: 否。附加整个序列的方法是。