Python 布尔与整数的恒等式比较

Python 布尔与整数的恒等式比较,python,Python,我一直在玩,发现了这个 运算符是和不是测试对象的标识:当且仅当x和y是同一对象时,x为y为真。使用id()函数确定对象的标识。x不是y,产生反真值 >>列表(映射(id[0,1,True,not False,False,not True])) [94660352164256, 94660352164288, 94660351988128, 94660351988128, 94660351988096, 94660351988096] 现在一切正常:0、1、True和False具有不同的ID,因

我一直在玩,发现了这个

运算符
不是
测试对象的标识:当且仅当x和y是同一对象时,x为y为真。使用
id()
函数确定对象的标识。x不是y,产生反真值

>>列表(映射(id[0,1,True,not False,False,not True]))
[94660352164256, 94660352164288, 94660351988128, 94660351988128, 94660351988096, 94660351988096]
现在一切正常:
0
1
True
False
具有不同的ID,因为它们是不同的对象。它们是:

>>True为1
假的
>>>False是0
假的
>>>不假即真
真的
>>>不正确就是错误
真的
但是:

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

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

这是因为
is
not
之前

因此:

以及:


它与优先级和操作员优先级有关。你可以这样想:

(True不是1)
不是(False是真)
不是(False是1)


现在一切都有了意义。

非x即y
相当于
x非y
非x即y
是一种非惯用的拼写方法
x非y
。它根本不是
(不是x)是y
不是真的是0
=
不是(真的是0)
。查看
not False is 1 => not (False is 1) => not False => True
not True is 0 => not (True is 0) => not False => True