【问题标题】:Identity comparison between booleans and integers [duplicate]布尔值和整数之间的身份比较[重复]
【发布时间】:2020-08-31 21:08:15
【问题描述】:

我一直在玩,发现了这个。

运算符 isis not 测试对象的身份:当且仅当 x 和 y 是同一个对象时,x 为 y 为真。使用id() 函数确定对象的身份。 x is not y 产生逆真值。

>>> list(map(id, [0, 1, True, not False, False, not True]))
[94660352164256, 94660352164288, 94660351988128, 94660351988128, 94660351988096, 94660351988096]

现在一切正常:01TrueFalse 具有不同的 id,因为它们是不同的对象。他们是:

>>> True is 1
False
>>> False is 0
False
>>> not False is True
True
>>> not True is False
True

然后:

>>> not False is 1
True
>>> not True is 0
True
>>> 

我的问题是:怎么可能同时True is not 1not False is Truenot False is 1都返回True

【问题讨论】:

  • not x is y 等价于x is not y
  • not x is y 是拼写 x is not y 的一种非惯用方式。根本不是(not x) is y
  • not True is 0 == not (True is 0)。查看Operator precedence

标签: python


【解决方案1】:

那是因为isnot 之前。

https://docs.python.org/3/reference/expressions.html#operator-precedence

所以:

not False is 1 => not (False is 1) => not False => True

和:

not True is 0 => not (True is 0) => not False => True

【讨论】:

    【解决方案2】:

    它与优先级和运算符优先级有关。可以这样想:

    (True is not 1)not (False is True)not (False is 1)

    现在一切都应该有意义了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多