引用某事:
>>> x = y = somefunction()
是相同的
>>> y = somefunction()
>>> x = y
问题:是
x = y = somefunction()
与
x = somefunction()
y = somefunction()
?
根据我的理解,它们应该相同,因为 somefunction
只能返回一个值。
原文由 q0987 发布,翻译遵循 CC BY-SA 4.0 许可协议
x = y = some_function()
相当于
temp = some_function()
x = temp
y = temp
注意顺序。 首先分配最左边的目标。 (C 中的类似表达式 可能会 以 相反的顺序 分配。)来自 Python 分配 的文档:
…将单个结果对象从左到右分配给每个目标列表。
反汇编显示:
>>> def chained_assignment():
... x = y = some_function()
...
>>> import dis
>>> dis.dis(chained_assignment)
2 0 LOAD_GLOBAL 0 (some_function)
3 CALL_FUNCTION 0
6 DUP_TOP
7 STORE_FAST 0 (x)
10 STORE_FAST 1 (y)
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
注意: 相同的对象 总是分配给每个目标。所以正如@Wilduck 和@andronikus 指出的那样,你可能永远不想这样:
x = y = [] # Wrong.
在上面的例子中,x 和 y 指的是同一个列表。因为列表是 可变 的,附加到 x 似乎会影响 y。
x = [] # Right.
y = []
现在您有两个名称,分别指向两个不同的空列表。
原文由 Bob Stein 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
如果
somefunction
返回可变值,它们不一定会工作相同。考虑: