【发布时间】:2017-03-03 20:38:49
【问题描述】:
我使用的是 Python 3.5.2 shell。我很困惑为什么会这样?
5 > 5**2
False
5 > 5**2 == False
False
(5 > 5**2) == False
True
操作的顺序定义了**在>之前执行,>在==之前,所以它应该可以工作。
【问题讨论】:
标签: python python-3.x python-3.5
我使用的是 Python 3.5.2 shell。我很困惑为什么会这样?
5 > 5**2
False
5 > 5**2 == False
False
(5 > 5**2) == False
True
操作的顺序定义了**在>之前执行,>在==之前,所以它应该可以工作。
【问题讨论】:
标签: python python-3.x python-3.5
有趣的问题!出现这种行为的原因是 Python 中的所有比较运算符都具有相同的优先级和 can be chained。
所以你的第二个比较相当于
5 > 25 and 25 == False
当然评估为False。
但我同意在这种情况下,它不是很直观。
【讨论】:
(5 > 5**2) == False => True
(5 > 5**2) == False,只需使用not (5 > 5**2) 或5 <= 5**2
if (i <= j) != (a[i] <= a[j]) 或类似的东西。
5.15。运算符优先级
下表总结了 Python 中的运算符优先级,从最低优先级(最少绑定)到最高优先级(最多绑定)。同一框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二元的。同一框中的运算符从左到右分组(除了比较,包括测试,它们都具有相同的优先级和从左到右的链 - 参见比较部分 - 和取幂,从右到左分组 )。
【讨论】: