操作顺序不正确?

Order of operations Incorrect?

我正在使用 Python 3.5.2 shell。我很困惑为什么会这样?

5 > 5**2
False
5 > 5**2 == False
False
(5 > 5**2) == False
True

操作的顺序定义了 ** 在 > 之前执行,在 == 之前执行,所以它应该可以工作。

有趣的问题!这种行为的原因是 Python 中的所有比较运算符都具有相同的优先级并且 can be chained.

所以你的第二个比较等同于

5 > 25 and 25 == False

当然计算结果为 False。 但我同意,在这种情况下,它不是很直观。

5.15。运算符优先级

以下table总结了Python中的运算符优先级,从最低优先级(最少绑定)到最高优先级(最多绑定)。同一框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二进制的。同一框内的运算符从左到右分组(除了比较,包括测试,它们都具有相同的优先级和从左到右的链——参见比较部分——和求幂,从右到左分组).

5 Expressions - Python