我想知道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
来测试这一点。
答案 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
的优先级低于<
。