这个交换类型表达式是如何工作的?

How is this swap type expression working?

我一直在试验 python。我找到了变量的交换方法:

var1, var2 = var2, var3

我想用同样的方法进行比较(==),但结果并不令人满意。

>>> foo = 2
>>> bar = 3
>>> foo, bar == bar, foo
(2, True, 2)
>>> 

我以为它会简单地给出 False。原因:

foo 不等于 bar 且 bar 不等于 foo

我又做了一些测试:

>>> foo = 2
>>> bar = 3
>>> foobar = 4
>>> foo, bar, foobar == foobar, foo, bar
(2, 3, True, 2, 3)
>>> 

结果还是一样,我预计它会给出 False。原因:


效果如何?

和运算符优先级有关,就像

2 + 3 * 4 == 14

因为它与(因为*的优先级高于+

相同
2 + (3 * 4) 

表达式

var1, var2 = var2, var3

与(因为逗号运算符的优先级高于赋值运算符)相同:

(var1, var2) = (var2, var3)

var1, var2 == var2, var3

等同于(因为 == 运算符的优先级高于逗号运算符)

var1, (var2 == var2), var3

手册相关部分:https://docs.python.org/3/reference/expressions.html#evaluation-order

期望的结果,即产生

的表达式
(a==c), (b==d)

来自

a, b ... c, d

在一般情况下稍微复杂一些。您当然可以只写 (a==c), (b==d) 甚至 a==c, b==d,但是@AdamSmith 的建议适用于任意数量的参数(并且您不需要提取元组元素):

all(x==y for x,y in zip([a, b], [c, d]))