布尔恒等 == True 与 is True

2023-11-24

这是使用的标准约定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(使用前将#替换为@)

布尔恒等 == True 与 is True 的相关文章

随机推荐

  • 如何在自包含的 Angular 2 组件中包含字体

    我有一个需要自定义字体作为依赖项的组件 我希望该组件能够处理字体本身的导入 以便它是可移植的 另外 我们的项目正在使用 angular cli 所以我无论如何都无法控制 webpack config 我希望 Angular cli 足够智能
  • Azure 应用服务 - 写入文件系统 - ASP.NET Web 应用程序

    我有一个在 Visual Studio 2017 中创建的 ASP NET Web 应用程序 在应用程序中有一个表单 用户可以在其中上传文件 上传文件后 我会处理它们并将它们保存在文件系统上 var photo Request Files
  • Ruby 参数列表中的单个 splat/星号是什么意思? [复制]

    这个问题在这里已经有答案了 今天我翻阅Rails 3 ActiveRecord源代码发现整个参数列表是单个星号的方法 def save 我找不到关于它的作用的良好描述 尽管我根据我对 splat 参数的了解有一些想法 它有什么作用 为什么要
  • 如何删除工作表中未清除的行?

    我不知道如何删除行而不留下空行 我正在使用 Apache POI 3 9 但使用以下代码时出现错误 public List
  • Android 广播接收器错误:未找到类异常

    我有一个广播接收器设置 以便在每次升级我的应用程序后 或者如果这是第一次安装软件包时 都会向用户显示一条弹出消息 我在运行 Android 2 2 的 Droid 上进行了测试 无论是全新安装还是升级应用程序后 以及运行 1 5 和 1 6
  • 为什么 django SimpleTestCase 创建测试数据库

    如中所解释的this问题并在Django 文档 当在单元测试中使用SimpleTestCase时 django不应该创建测试数据库 这需要太长时间 在我的一个名为 搜索 的应用程序中 我有一些从 SimpleTestCase 继承的单元测试
  • $.ajax() 成功不会运行函数

    我的问题是关于 ajax jQuery 方法 我无法获取成功参数 ajax 上班 这有效 ajax type POST url getCodes php codes billingCodes parent wClient val dataT
  • 设置iframe的内容

    我有以下结构 div p Hello World p div 我有以下 JavaScript 变量content var s div Test Div div 如何更改带有id的iframe的内容myiframe有变量s I tried m
  • $.getJSON 中的 beforeSend

    我该如何使用beforeSend回调中 getJSON 跨域 进一步来说 getJSON调用的是 YQL 服务 喜欢 从 html 中选择 其中 网址 http www yahoo com 唯一的目的就是发送前是获取原始 XHR 对象 通常
  • 惰性量词 {,}?没有按我的预期工作

    我对惰性量词有疑问 或者很可能我误解了我应该如何使用它们 测试于Regex101我的测试字符串是 123456789D123456789 1 5 火柴12345 1 5 火柴1 我对两场比赛都满意 1 5 D火柴56789D 我希望它能够匹
  • 创建对象时 Javascript“不是构造函数”异常

    我定义一个这样的对象 function Project Attributes ProjectWidth ProjectHeight this ProjectHeight ProjectHeight this ProjectWidth Pro
  • SQL Server 集成服务 2008-2005 兼容性

    我最近在我的开发机器上使用 2008 版本开发了一个 SSIS 包 后来我发现客户有Sql server 2005并且不打算很快升级 有没有办法将 2008 包变成 SSIS 2005 包 就像降级向导一样 感谢一位未透露姓名的消息来源 我
  • OpenSSL:无法在 VC++ 2010 中构建

    我已经下载了最新的OpenSSL源码包 我想用 VC 2010 x64 构建它 按照说明操作似乎不起作用 配置步骤看起来不错 但是 C 1 gt ms do win64a bat C 1 gt perl util mkfiles pl 1
  • 使用 SymPy 将符号表达式转换为 Python 函数

    我有一个相当大的符号函数 它针对循环中参数的不同值进行评估 在每次迭代中 在找到函数的表达式后 导出偏导数 像这样的东西 from sympy import diff symbols exp def lagrange eqs a x y z
  • 如何使用 EV SHA2 证书对 ClickOnce 部署进行身份验证并避免“未知发布者”

    通过 Visual Studio 的项目 签名 设置页面对我的 ClickOnce 部署进行签名时 我指定了 SHA2 SHA256 EV Authenticode 证书并发布 发布并尝试运行引导程序 setup exe 后 我会在 Cli
  • 为什么我的观察者会因同一个更改而被调用两次?

    我有一个 AngularJS 1 4 应用程序在本地运行 尚未 该应用程序由 Laravel 5 1 后端 RESTFul API 提供服务 我必须制作这个代表打包旅行的应用程序 一个包裹由天组成 范围从0天到N天 每天都有一个服务列表 范
  • 函数calculate.overlap的输出顺序

    我正在 R 包 VennDiagram 中使用 calculate overlap 函数 我比较了四组数据如下 library VennDiagram overlap calculate overlap x list 1 1 2 2 3 3
  • 通过 script 标签加载外部 javascript

    我正在尝试使用脚本标记动态加载脚本 但我做不到 我的渲染方法如下 render div a href http www authorize net target blank Working Yipee a div 我尝试使用angerous
  • 如何扩展/膨胀 numpy 数组?

    我正在执行图像分析并以布尔值的形式生成种子array import numpy as np Example output array a np array False False False False True False False F
  • 布尔恒等 == True 与 is True

    这是使用的标准约定if foo is None而不是if foo None测试一个值是否是特定的None 如果你想确定一个值是否精确True 不仅仅是一个类似真实的值 有什么理由使用if foo True而不是if foo is True