Python 运算符优先级:not和比较
我正在努力更好地理解python,由于某些原因,缺少括号可能会有点令人困惑 如何评估Python 运算符优先级:not和比较,python,Python,我正在努力更好地理解python,由于某些原因,缺少括号可能会有点令人困惑 如何评估(非a
(非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版本或移植到另一种语言时就不会有什么意外了。