【发布时间】:2015-12-13 19:36:08
【问题描述】:
python 语言参考提到了三个具有单个唯一实例的对象:None、NotImplemented 和 Ellipsis (section 3.2 "The Standard Type Hierarchy")。测试x is None 是一个常见的习惯用法,通过保证None 的唯一性成为可能。我在 python 文档或堆栈溢出中找不到任何其他提及唯一实例对象的内容。像this one 这样的一些问题对构建此类对象的方法提出了有趣的建议,但我想知道的是除了这三个内置函数之外是否还有其他我错过的。
例如,() 似乎是独一无二的(在 CPython 中公认的非常有限的测试中),那么测试 x is () 安全吗?或者这种情况下x == () 是强制性的吗?
【问题讨论】:
-
测试
x is ()是没有意义的,if x会达到同样的效果。你为什么要问? -
bool(x)是False的许多可能值。我需要检查x是否实际上是(),而不是其他可能性之一,原因与您使用x is None完全相同。 -
如果 x 是一个元组,
isinstance(x, tuple)也会明确允许您检查 x 实际上是一个元组 -
看到这一点并意识到我也可以返回 NotImplemented 而不是 None (并使用“is”测试它),当我想表示某些东西在 None 是不存在时,这很有帮助有效值(即从函数/方法请求的对象存在,但它的值可以是 None 与对象不存在)