当前位置: 首页 > 面试题库 >

布尔身份== True与True

龚跃
2023-03-14
问题内容

使用标准if foo is None而不是if foo == None测试特定值是否是标准约定None

如果要确定一个值是否准确True(不仅仅是一个真值),是否有使用if foo == True而不是使用任何理由if foo is True?这在CPython(2.x和3.x),Jython,PyPy等实现之间是否有所不同?

示例:sayTrue用作您要与value'bar'或其他真值相区别的单例值:

if foo is True: # vs foo == True
    ...
elif foo == 'bar':
    ...

是否存在使用if foo is True会产生与的不同结果的情况if foo == True

注意:我知道Python布尔值-如果x :,则x如果x ==
True,则x如果x为True
。但是,它只地址是否if fooif foo == Trueif foo is True一般应被用来确定是否foo有一个真正般的价值。

更新:根据PEP 285§规范:

值False和True将是单例,如None。


问题答案:

如果要确定某个值是否完全为True(而不仅仅是类似True的值),是否有任何理由使用foo == True而不是foo为True?

如果要确保foo确实是一个布尔值且具有值True,请使用is运算符。

否则,如果与相比时foo实现了__eq__()返回true值的实现类型,则True可能会导致意外结果。

作为一个经验法则,你应该总是使用is与内置常量TrueFalseNone

这在CPython(2.x和3.x),Jython,PyPy等实现之间是否有所不同?

从理论上讲,is它将比==后者更快,因为后者必须遵守类型的自定义__eq__实现,同时is可以直接比较对象标识(例如,内存地址)。

我并不是很清楚各种Python实现的源代码,但是我认为大多数实现可以通过使用一些内部标志来优化魔术方法的存在,因此我怀疑您不会注意到速度差异在实践中。



 类似资料:
  • 这是标准的惯例,使用而不是来测试一个值是否特别是。 如果您想确定一个值是否完全是(而不仅仅是一个类似true的值),是否有任何理由使用而不是?这在CPython(2. x和3. x)、Jython、PyPy等实现之间是否有所不同? 示例:假设用作要与值或任何其他类似True的值区分的单例值: 如果foo为真,使用

  • 我发现了这个语法: 这个有两个点的语法是什么:叫? 在哪里可以找到有关它的信息? 它是仅适用于布尔值还是以其他不同的方式实现?

  • 问题内容: 为什么在编写时默认分配给变量而不是变量? 我之所以问是因为,我遇到了一些代码,其中有一个关于布尔变量的求值,即是否确定是否执行方法。 问题答案: 布尔(带有大写的“ B”)是一个布尔对象,如果未分配值,则默认为null。布尔值(带有小写的“ b”)是布尔值基元,如果未分配值,则默认为false。

  • 我在ES中有两个问题。对于同一组文档,两者的周转时间都不同。两者在概念上都在做同样的事情。我没有什么疑问 1-这两者之间有什么区别?2-哪个更好使用?3-如果两者相同,为什么表现不同? 映射: 更新1: 我在同一组数据上尝试了bool/必须查询和bool/过滤器查询,但我发现了奇怪的行为 1-bool/必须查询能够搜索所需的文档 2-虽然bool/filter无法搜索文档。如果我删除第二个字段条件

  • 问题内容: 我有一个布尔值列表: 并且我正在寻找一种方法来计算列表中的数量(因此,在上面的示例中,我希望返回值是。)我已经找到了一些示例,这些示例寻找特定元素的出现次数。因为我正在使用布尔运算,所以有效的方法吗?我在想类似或的东西。 问题答案: 等于。

  • 如何解释列表与NumPy数组上布尔运算和按位运算的行为差异? 我对