【问题标题】:Expression valued differently and unexpectedly表达式的值不同且出乎意料
【发布时间】:2020-10-28 08:20:49
【问题描述】:

我正在使用 python 3.7.4。

我不知道为什么

2 > 3 > -1 == 错误

同时

(2 > 3) > -1 == 真

2 > (3 > -1) == 真 ??

【问题讨论】:

  • 因为True的计算结果为1,False的计算结果为0。或者换句话说,True对象的值为1,False对象的值为0。试试int(True)或@987654325 @.
  • 这是一个常见常见问题解答的变体,可能应该作为例如的副本关闭。 stackoverflow.com/questions/58084423/strange-chained-comparison

标签: python python-3.x


【解决方案1】:

试试0 == False1 == True。您将看到 boolean 是 Python 中 int 的子类。 此外,运算符是从左到右读取的,括号的优先级高于> 运算符。

所以最后两个如下:

(2 > 3) > -1  -> True > -1  -> 1 > -1  -> True
2 > (3 > -1)  -> 2 > True   -> 2 > 1   -> True

对于您给出的第一个,Python 将其读取为:

2 > 3 > -1  -> (2 > 3) and (3 > -1)  -> False and (3 > -1)  -> False

【讨论】:

    【解决方案2】:

    这与链式比较有关a op b op c相当于(a op b) and (b op c)

    • 2 > 3 > -1 --> (2 > 3) and (3 > -1) 导致False and True 给出False
    • (2 > 3) > -1 --> Python 将首先计算括号 (2 > 3) = 0 or False 然后 (0 > -1) = True or 1
    • 2 > (3 > -1) --> (3 > -1) = True or 1 然后(2 > 1) = True or 1

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 2017-12-01
      • 2015-06-18
      • 2014-09-11
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多