这是使用的标准约定if foo is None
而不是if foo == None
测试一个值是否是特定的None
.
如果你想确定一个值是否精确True
(不仅仅是一个类似真实的值),有什么理由使用if foo == True
而不是if foo is True
?这在 CPython(2.x 和 3.x)、Jython、PyPy 等实现之间是否有所不同?
示例:说True
用作要与值区分开的单例值'bar'
,或任何其他类似真实的值:
if foo is True: # vs foo == True
...
elif foo == 'bar':
...
有没有使用的情况if foo is True
会产生不同的结果if foo == True
?
注意:我知道Python 布尔值 - if x:, vs if x == True, vs if x is True。然而,它仅解决是否if foo
, if foo == True
, or if foo is True
一般应该用来判断是否foo
具有类似真实的价值。
更新:根据PEP 285§ 规格:
值 False 和 True 将是单例,如 None。
如果您想确定一个值是否完全为 True(而不仅仅是类似 true 的值),是否有任何理由使用 if foo == True 而不是 if foo is True?
如果你想确保foo
确实是一个布尔值并且有价值True
, 使用is
操作员。
否则,如果类型foo
实现自己的__eq__()
与比较时返回一个真实值True
,你可能会得到意想不到的结果。
根据经验,您应该始终使用is
与内置常量True
, False
and None
.
这在 CPython(2.x 和 3.x)、Jython、PyPy 等实现之间是否有所不同?
理论上,is
会比==
因为后者必须尊重类型的习惯__eq__
实施,同时is
可以直接比较对象身份(例如内存地址)。
我不记得各种Python实现的源代码,但我假设它们中的大多数可以通过使用一些内部标志来优化它是否存在魔术方法,所以我怀疑你不会注意到速度差异在实践中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)