Python中是否只有一个True和一个False对象



我知道Python保证NoneType只有一个实例,即None对象,因此您可以安全地使用is None来测试是否有东西等于None

对于boolTrueFalse是否有一个等价的保证(即每个只有一个实例)?

如果没有,为什么没有?

EDIT:特别是,我注意到(n+0) is (0+n)range(-5, 257)False中为n给出True。换句话说,0,前256个正整数和前5个负整数似乎是预缓存的,并且不会再次实例化。我猜这是解释器的选择(在我的情况下是CPython),而不是语言的规范。bool源于int,所以我仍然想知道我对其他解释器有什么期望。

EDIT:澄清一下,因为这似乎产生了很多混乱,我的意图是而不是来测试值的布尔解释。因此,我永远不会使用is Trueis False。我的目的是能够区分False和其他所有东西,在一个变量中,可以有几种类型的值,包括空字符串、零和None, True也是如此。我自己就是一个经验丰富的程序员,当我看到"if boolean == True"时,我就会畏缩。

关于重复的注释:这个问题被指控是(this和this)的重复,不回答这个问题;他们只是声明boolint的子类,主要区别在于repr,而不是保证TrueFalse是唯一的。

此外,请注意,这不是关于名称 TrueFalse绑定到什么的问题,而是关于类bool实例

From docs (https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy):

)

布尔值

这些表示真值False和True。表示值False和True的两个对象是唯一的布尔对象。

只有两个对象,任何产生布尔值的计算都会产生这两个对象中的一个:

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

bool类型只有两个实例,TrueFalse。而且,它不能被子类化,所以没有办法创建一个可以有额外实例的派生类。

但是,即使它是有保证的,也很少有好的理由依赖它。您通常应该使用if x而不是if x is True,并避免需要将True与其他真值或False与其他假值区分开来的情况。

最新更新