8

这两种检查三个对象是否相等的方法在计算上是否存在差异?

我有两个变量:xy. 说我这样做:

>>> x = 5
>>> y = 5
>>> x == y == 5
True

这与:

>>> x = 5
>>> y = 5
>>> x == y and x == 5
True

如果他们是False怎么办?

>>> x = 5
>>> y = 5
>>> x == y == 4
False

和:

>>> x = 5
>>> y = 5
>>> x == y and x == 4
False

它们的计算方式有什么不同吗?

此外,如何x == y == z工作?

提前致谢!

4

2 回答 2

17

Python 有链式比较,所以这两种形式是等价的:

x == y == z
x == y and y == z

除了在第一个中, y 只被评估一次。

这意味着您还可以编写:

0 < x < 10
10 >= z >= 2

等等。你也可以写一些令人困惑的东西,比如:

a < b == c is d   # Don't  do this

初学者有时会被这个绊倒:

a < 100 is True   # Definitely don't do this!

这将始终是错误的,因为它与以下内容相同:

a < 100 and 100 is True   # Now we see the violence inherent in the system!
于 2012-12-09T22:38:10.250 回答
0

为已经接受的答案添加一点视觉演示。

用于测试三个值或变量的相等性。我们可以使用:

>>> print(1) == print(2) == print(3)
1
2
3
True

>>> print(1) == print(2) and print(2) == print(3)
1
2
2
3
True

上述语句等效但不等于,因为访问只执行一次。Python 自然地链接关系运算符。请参阅文档:

比较可以任意链接,例如,x < y <= z 等价于 x < y 和 y <= z,除了 y 只计算一次(但在这两种情况下,当找到 x < y 时根本不计算 z是假的)。

如果调用的函数(并且您正在比较返回值)没有副作用,那么这两种方法是相同的。

在这两个示例中,如果第一个比较评估为假,则不会评估第二个比较。但是:小心添加括号。例如:

>>> 1 == 2 == 0
False
>>> (1 == 2) == 0
True

看到这个答案。

于 2021-06-02T13:50:29.610 回答