布尔值和整数之间的恒等比较

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


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


>>> list(map(id, [0, 1, True, not False, False, not True]))

[94660352164256, 94660352164288, 94660351988128, 94660351988128, 94660351988096, 94660351988096]

现在一切正常:0、1、True且False具有不同的 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 1True


白板的微信
浏览 134回答 2
2回答

DIEA

那是因为is之前not。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

慕少森

它与优先级和运算符优先级有关。可以这样想:(True is not 1), not (False is True), not (False is 1).现在一切都应该有意义了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python