在Python中分配多个值时的奇怪问题[重复]

Posted

技术标签:

【中文标题】在Python中分配多个值时的奇怪问题[重复]【英文标题】:Strange question when assign multiple values in Python [duplicate] 【发布时间】:2021-09-01 14:42:40 【问题描述】:

给定一个数组 nums=[3,2,1,0]

当我运行这段代码时:

i=0
nums[i],i=None,nums[i]
print(i,nums)
>>>3 [None, 2, 1, 0]

但是当我改变赋值顺序时

i=0
i,nums[i]=nums[i],None
print(i,nums)
>>>3 [3, 2, 1, None]

这让我感到困惑,因为我认为作业是同时发生的

在这里,在我的第一个代码 sn-p 中,它按预期运行,nums[i] 设置为 None,同时 i 设置为旧 nums[i]

但是在第二个代码sn-p中,好像是先把i设为3,再把nums[3]设为None。

【问题讨论】:

不,链接的问题没有解决这个问题 【参考方案1】:

评估顺序可以在in the documentation找到。相关部分是:

expr3, expr4 = expr1, expr2

我们在哪里,按顺序:

expr1: nums[i] 评估为 3 expr2:None expr3: i 设置为 expr1 的结果 expr4: nums[i] 其中使用的i 在 expr3 中设置。

这种操作顺序,特别是在这种情况下,我们的第四个表达式是基于我们的第三个表达式,是什么搞砸了。

【讨论】:

整洁,我会选择它作为实现细节,而不是规范记录!直到! 顺便说一句,为了进一步实验,我们可以在调用每个 getter 和 setter 时定义一个具有属性(或覆盖 [])然后 print 的对象;但是,文档很清楚【参考方案2】:

我最近了解到作业是从左到右进行的。

虽然,首先评估= 右侧的表达式,然后分配左侧的项目,一次一个。

这意味着在第二个 sn-p 中你将拥有:

i = nums[i]     #  first
nums[i] = None  # second

看起来,在这里,i 在第二次分配发生之前被修改了。

【讨论】:

以上是关于在Python中分配多个值时的奇怪问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Firebase:保留在observeSingleEvent中分配的值[重复]

通过 RegQueryValueEx 和 RegGetValue 获取注册表值时的奇怪行为 [重复]

在 Python 中为 True 定义值时的奇怪行为

访问在函数中分配的变量[重复]

在结构中分配内存时出现不可预测的行为

编译器错误`在if语句中分配不兼容的类型`[重复]