Python 运算符优先级:not和比较

Python 运算符优先级:not和比较,python,Python,我正在努力更好地理解python,由于某些原因,缺少括号可能会有点令人困惑 如何评估(非a

我正在努力更好地理解python,由于某些原因,缺少括号可能会有点令人困惑

如何评估
(非a
?是不是
(不是a)
?或者
不是(a


根据,是否
not
的优先级低于或高于
您在2.7手册中看到的是所有具有相同优先级的关系运算符,包括
not in
is not
;布尔
not
的优先级仍然较低一级,因此关系比较首先发生。

在需要指定计算顺序的地方添加括号。阅读您的代码的人将更乐于避免检查文档。理解代码比运算符优先级更重要。注
a
(a
不同,原因有二——可以重载比较,因此它们不一定是可交换的,链式比较扩展为
(a
;它与
a
c
无关。我发现
dis
ast
模块对此类问题很有帮助,例如
dis.dis(lambda,b,c:非a
打印(ast.dump(ast.parse('not a
)。与编译器没有任何争议。@eryksun这只有在您能够理解编译器的情况下才有帮助…:)agf,我没有想到a+1。需要明确的是,“关系比较”是
(a
,它首先发生,因此在这两种情况下,结果都相当于
而不是(a
——尽管@Jake提出了一个很好的观点,那就是通常最好用括号将其显式化,这样在更改python版本或移植到另一种语言时就不会有什么意外了。