提问人:oBrstisf8o 提问时间:6/8/2023 更新时间:6/8/2023 访问量:30
Python:表达式中等式/不等式的实际执行顺序?[复制]
Python: real order of execution for equalities/inequalities in expressions? [duplicate]
问:
想象一下这个“鬼鬼祟祟”的 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 表示 。int
1
0
这可能是一个实现细节,可能因版本而异,所以我最感兴趣的是 python 3.10。
答:
1赞
Barmar
6/8/2023
#1
Python 允许您链接条件,并将它们与 .所以and
1 == 2 < 3
相当于
1 == 2 and 2 < 3
这对于不等式链最有用,例如 如果介于 和 之间,则为 true。1 < x < 10
x
1
10
添加括号后,它不再是链条。所以
(1 == 2) < 3
相当于
False < 3
True
并且等价于 和 ,所以与 相同,后者是 。False
0
1
False < 3
0 < 3
True
同样地
1 == (2 < 3)
相当于
1 == True
这相当于
1 == 1
这显然是.True
评论
1 == 2 < 3
1 == 2 and 2 < 3
2 < 3
1 == 2