Python 链式比较的优先级?
我想知道Python是如何解析的:Python 链式比较的优先级?,python,Python,我想知道Python是如何解析的: not a < b < c 不是a
not a < b < c
不是a
这似乎解释为:
not (a < b < c)
not(a
与(非a)
此问题解释了分组与链接:
但是链式比较的优先级规则是什么
我感到奇怪的是,not
,
具有相同的优先级,但是nota
解析为not(a
,而-a
解析为(.a
)
我通过在Python2.7中评估
而不是2>1>2来测试这一点。Python有一个抽象语法树模块来向您展示发生了什么:
import ast
t = ast.parse('not a < b < c')
print(ast.dump(t))
事实上,not
的优先级低于not2<1<2
并没有被解析为not(2<1<2)
。每个术语从左到右处理。not 2
为False
,与数值0
相同-因此它相当于0<1<2
。此提示已被查看。可能是:是什么让你认为不是,
有同样的优先权?@martineau我用的是2>1>2而不是2<1<2,我认为这不是真的parsing@user2357112我错误地将not in
和is not
测试误认为是布尔not
运算符
[Expr(value=UnaryOp(
op=Not(),
operand=Compare(
left=Name(id='a'),
ops=[Lt(), Lt()],
comparators=[Name(id='b'), Name(id='c')]
)
))]