在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中分配的值[重复]