operator precedence 的 Python 文档状态:
Operators in the same box group left to right (except for comparisons, including tests, which all have the same precedence and chain from left to right — see section Comparisons...)
这是什么意思?具体来说:
“同一个盒子里的算子从左到右分组(除了 比较...)" -- 比较不是从左到右分组吗?
如果比较不从左到右分组,它们会做什么?他们是“链式”而不是“群体”吗?
如果比较“链”而不是“组”,那么“链”和“组”有什么区别?
有哪些例子可以证明比较运算符是从左到右而不是从右到左链接的?
最佳答案
分组(这是非比较运算符所做的):
a + b + c means (a + b) + c
链接(这是比较运算符所做的):
a < b < c means (a < b) and (b < c)
从左到右分组(这是事物分组的方式):
5 - 2 - 1 means (5 - 2) - 1 == 2
与从右到左分组相反(这会产生不同的结果):
5 - (2 - 1) == 4
从左到右链接
链接是从左到右的,因此在 a < b < c
中, 表达式 a < b
在 b < c
之前被评估, 如果 a < b
是假的,b < c
不评价。
(2 < 1 < f())
给出值 False
不调用函数 f
,因为 2 < 1
计算结果为 false,因此不需要进行第二次比较。
f() > 1 > g()
电话 f()
为了评估第一个比较,并根据结果,它可能需要也可能不需要评估第二个条件,这需要调用 g()
.
注意。每个操作数最多评估一次。所以在表达式 1 < f() < 2
中, 函数 f()
只调用一次,它给出的值用于两次比较(如果需要)。
关于python - Python 比较运算符从左到右链/组是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753474/