python - Python 比较运算符从左到右链/组是什么意思?

标签 python comparison operator-precedence associativity

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...)

这是什么意思?具体来说:

  1. “同一个盒子里的算子从左​​到右分组(除了 比较...)" -- 比较不是从左到右分组吗?

  2. 如果比较从左到右分组,它们会做什么?他们是“链式”而不是“群体”吗?

  3. 如果比较“链”而不是“组”,那么“链”和“组”有什么区别?

  4. 有哪些例子可以证明比较运算符是从左到右而不是从右到左链接的?

最佳答案

分组(这是非比较运算符所做的):

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 < bb < c 之前被评估, 如果 a < b是假的,b < c不评价。

(2 < 1 < f())给出值 False不调用函数 f ,因为 2 < 1计算结果为 false,因此不需要进行第二次比较。

f() > 1 > g()电话 f()为了评估第一个比较,并根据结果,它可能需要也可能不需要评估第二个条件,这需要调用 g() .

注意。每个操作数最多评估一次。所以在表达式 1 < f() < 2 中, 函数 f()只调用一次,它给出的值用于两次比较(如果需要)。

https://en.wikipedia.org/wiki/Short-circuit_evaluation

关于python - Python 比较运算符从左到右链/组是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753474/

相关文章:

python - 将工作日名称字符串转换为日期时间

function - 在 RethinkDB 中查找满足多个条件的文档

javascript - 比较操作 - 正确的语法?

c# - 检查列表是否包含一个属性相同的对象的优雅方法,并且仅在另一个属性的日期较晚时才替换

racket - 方案/ Racket : do loop order of evaluation

c - 为什么代码中的输出不是这个?

类似于 MATLAB 的 end/2 的 Python 索引

python - 从文件中读取小端并转换为十进制

python - h5py 未针对 mpi4py 正确构建

c - 在 C 中,*、=、++、<< |运算符(operator)