首页 > 解决方案 > 这个交换类型表达式是如何工作的?

问题描述

我一直在尝试使用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. 原因:

在此处输入图像描述


这是如何工作的?

标签: pythonvariablesbooleanswap

解决方案


它与运算符优先级有关,就像

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)or a==c, b==d,但@AdamSmith 的建议适用于任意数量的参数(并且您不需要提取元组元素):

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

推荐阅读