在Python中破坏赋值顺序

时间:2018-03-08 14:43:36

标签: python

今天我遇到了这个表达:

(x,_),(y,_) = load_data()

......我想知道作业的顺序是什么。

例如x,x,x = 1,2,3从我的测试中将x设置为3,是否真的将x设置为1,2,而不是3?

遵循的规则是什么?在第一个代码片段等更复杂的条件下会发生什么?

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}}。下划线是解包您不关心的值的约定。当第二个元组被解压缩时,它将被覆盖。