这两种方法检查三个对象之间是否有任何计算差异?
我有两个变量:x
和y
。说我这样做:
>>> 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
如何运作?
提前致谢!
答案 0 :(得分:13)
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!
答案 1 :(得分:0)
为已经接受的 answer 添加一点视觉演示。
用于测试三个值或变量的相等性。我们可以使用:
>>> 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 自然地链接关系运算符。请参阅 this 文档:
<块引用>比较可以任意链接,例如,x < y <= z 等价于 x < y 和 y <= z,除了 y 只计算一次(但在这两种情况下,当 x < y 被发现是假的)。
如果调用的函数(并且您正在比较返回值)没有副作用,则两种方式相同。
在这两个示例中,如果第一个比较结果为 false,则不会评估第二个比较。但是:注意添加括号。例如:
>>> 1 == 2 == 0
False
>>> (1 == 2) == 0
True
见 this 答案。