Python:表达式中等式/不等式的实际执行顺序?[复制]

Python: real order of execution for equalities/inequalities in expressions? [duplicate]

提问人:oBrstisf8o 提问时间:6/8/2023 更新时间:6/8/2023 访问量:30

问:

想象一下这个“鬼鬼祟祟”的 python 代码:

>>> 1 == 2 < 3
False

根据 Python 文档,所有运算符都具有相同的优先级,但这里发生的事情似乎是矛盾的。in, not in, is, is not, <, <=, >, >=, !=, ==

实验后,我得到了更奇怪的结果:

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

这是怎么回事?

(注)

>>> True == 1
True
>>> True == 2
False
>>> False == 0
True
>>> False == -1
False

布尔类型是 的子类,True 表示,False 表示 。int10

这可能是一个实现细节,可能因版本而异,所以我最感兴趣的是 python 3.10。

python-3.x 相等 运算符优先级 布尔表达式

评论

3赞 chepner 6/8/2023
比较链接:等同于 ,而不是您正在尝试的显式括号版本中的任何一个。 永远不会被评估,因为是错误的。1 == 2 < 31 == 2 and 2 < 32 < 31 == 2

答:

1赞 Barmar 6/8/2023 #1

Python 允许您链接条件,并将它们与 .所以and

1 == 2 < 3

相当于

1 == 2 and 2 < 3

这对于不等式链最有用,例如 如果介于 和 之间,则为 true。1 < x < 10x110

添加括号后,它不再是链条。所以

(1 == 2) < 3

相当于

False < 3

True并且等价于 和 ,所以与 相同,后者是 。False01False < 30 < 3True

同样地

1 == (2 < 3)

相当于

1 == True

这相当于

1 == 1

这显然是.True