链式比较的优先级?

时间:2017-09-10 01:53:39

标签: python

我想知道Python如何分析:

not a < b < c

似乎将此解释为:

not (a < b < c)

而不是(not a) < b < c

这个问题解释了分组与链接: Python comparison operators chaining/grouping left to right?但链式比较的优先顺序是什么?

我很奇怪not<>具有相同的优先级,但not a < b < c解析为not (a < b < c)-a < b < c解析为(-a) < b < c

我通过评估Python 2.7中的not 2 > 1 > 2来测试这一点。

1 个答案:

答案 0 :(得分:3)

Python有一个抽象语法树模块,可以向您展示发生了什么:

import ast
t = ast.parse('not a < b < c')
print(ast.dump(t))

它给了(清理了一下):

[Expr(value=UnaryOp(
    op=Not(),
    operand=Compare(
        left=Name(id='a'),
        ops=[Lt(), Lt()],
        comparators=[Name(id='b'), Name(id='c')]
    )
))]

事实上,documentation表示not的优先级低于<