首页 > 解决方案 > 布尔值和整数之间的身份比较

问题描述

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

对象身份的运算符is和测试:当且仅当 x 和 y 是同一个对象时,x 是 y 为真。is not使用该id()函数确定对象的身份。x is not 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 1又全部返回?not False is Truenot False is 1True

标签: python

解决方案


那是因为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

推荐阅读