今天我遇到了这个表达:
(x,_),(y,_) = load_data()
......我想知道作业的顺序是什么。
例如x,x,x = 1,2,3
从我的测试中将x
设置为3
,是否真的将x
设置为1,2,而不是3?
遵循的规则是什么?在第一个代码片段等更复杂的条件下会发生什么?
答案 0 :(得分:4)
documentation on assignment statements的相关部分是:
如果目标列表是逗号分隔的目标列表,或方括号中的单个目标:对象必须是具有与目标列表中的目标相同的项目数的可迭代项,并且项目已分配,从左到右,到相应的目标。
(强调我的:确定订单的方式。)
答案 1 :(得分:1)
它会将load_data()返回的元组加载到您定义的变量x,y和_中。这反过来会将每个元组的第一个成员分配给x和y,将最后一个值分配给_
变量(第二次调用它时会被覆盖)。
示例:
def load_data():
return (1,2), (3,4)
(x, _), (y, _) = load_data()
print(x, y, _)
输出
1 3 4
答案 2 :(得分:0)
这是一个非常有趣的问题,不过我首先应该说你可能不应该每行多次分配同一个变量。
第一个示例期望--rebase
返回两个元组。它会将OnChange()
分配给第一个。{1}}。下划线是解包您不关心的值的约定。当第二个元组被解压缩时,它将被覆盖。