【发布时间】:2014-07-19 17:05:03
【问题描述】:
我知道 Python 保证只有一个 NoneType 实例,即 None 对象,因此您可以安全地使用 is None 来测试是否等于 None。
bool True 和 False 是否有同等的保证(即每个只有一个实例)?
如果没有,为什么不呢?
编辑:特别是,我注意到(n+0) is (0+n) 在range(-5, 257) 和False 中为n 提供True,否则为False。换句话说,零、前 256 个正整数和前 5 个负整数似乎是预先缓存的,不会再次实例化。我猜这是解释器的选择(在我的例子中是 CPython),而不是语言的规范。而bool 源自int,所以我仍然想知道我对其他口译员有什么期望。
编辑:澄清一下,因为这似乎产生了很多混乱,我的意图是不来测试一个值的布尔解释。为此,我永远不会使用is True 或is False。我的意图是能够将False 与其他所有内容区分开来,在一个变量中,该变量可以具有多种类型的值,包括空字符串、零和None,对于True 也是如此。我自己是一位经验丰富的程序员,当我看到“if booleanvar == True”时会畏缩。
关于重复的注意事项: 据称此问题与(this 和 this)重复的问题不回答此问题;他们只是声明bool 是int 的子类,主要区别在于repr,而不是True 和False 保证是唯一的。
另外,请注意,这不是关于True 和False 的名称 绑定的问题,而是关于bool 类的实例 .
【问题讨论】:
-
您为什么需要/想要这样做?与
if var:相比,if var is True:这样的东西很难看。 -
一般来说:不要针对
True或False进行测试。改为使用表达式的隐式布尔值。 -
1.这取决于哪个版本的 Python;和 2. 永远不要依赖这个(根据PEP-0008:“是:
if greeting:,否:if greeting == True:,更糟糕的是:if greeting is True:)。 -
@PedroGimeno:我强烈建议你不要使用
is True或is False。您将改用if something:,并且not 测试True 或False。如果你必须有一个布尔值,最好使用isinstance(object, bool)。 -
内置名称
True和False是单例。
标签: python object boolean instance