首页 > 解决方案 > Python - 为什么'&'和'and'运算符提供不同的结果,尽管评估条件相同的结果

问题描述

我刚开始学习 Python。我遇到了以下问题。如下所示,我正在使用“&”运算符编写相同的语句,然后使用“and”运算符。尽管这两个运算符都将“if”条件评估为相同的布尔输出“True”True 'and' True 是 True并且True & True 是 True),但为什么结果不同?为什么'&'给出错误的答案?感谢任何澄清。

a = 70
b = 40
c = 60

x = a if a>b and a>c else b if b>c else c
print('Max value with "and":', x)

x = a if a>b & a>c else b if b>c else c
print('Max value with "ampersand":', x)

输出是:

“和”的最大值:70

“&”的最大值:60

标签: python

解决方案


为什么结果不同?为什么'&'给出错误的答案?

因为它们是完全不同的运算符,具有完全不同的语义和完全不同的优先级&apply before>哪个 apply before and

所以当你写a > b and a > c它时,它被解析为(a > b) and (a > c).

但是当你写的时候a > b & a > c,它被解析为a > (b & a) > c.

还有一个不同之处在这里不相关,但在其他上下文中会成为一个因素:and(and or) 是惰性运算符,这意味着它们将评估左操作数,然后做他们的事情,然后才评估第二个操作数。&然而,它是一个普通的“急切”运算符,它评估两个操作数,然后才应用它所做的任何事情。

最后,这当然是最大的区别:and适用于所有内容并且不可覆盖;&仅适用于专门支持它的类型,并执行其定义的任何操作(对于整数,它是按位与,但对于集合,它是交集)。


推荐阅读