在 Python if 或 if/elif 语句末尾包含 else: pass 语句是最佳实践吗?

2023-11-26

如果我写:

if a == b:
    # do something
elif a == c:
    # do something else

我只是想通过,否则,最后是否需要写出以下内容?:

else:
    pass

它似乎运行良好,没有else:口译员中的声明,是否有一个我不知道的原因我应该始终包括在内else: pass在这些情况下?


不,不是,那个else套房完全是可选的。

来自if声明文件:

if_stmt ::=  "if" expression ":" suite
             ( "elif" expression ":" suite )*
             ["else" ":" suite]

where (...)* means 零个或多个, and [...] means optional。所以一个有效的if复合语句有一个if系列和套件,0 或更多elif行和相应的组,最多一个elseline 和 suite,这是可选的。

Python 编译器将忽略任何else: pass块,包含它确实没有意义:

>>> import dis
>>> dis.dis(compile('''\
... if True:
...     foo
... else:
...     pass
... ''', '<stdin>', 'exec'))
  1           0 LOAD_NAME                0 (True)
              3 POP_JUMP_IF_FALSE       13

  2           6 LOAD_NAME                1 (foo)
              9 POP_TOP             
             10 JUMP_FORWARD             0 (to 13)

  4     >>   13 LOAD_CONST               0 (None)
             16 RETURN_VALUE        
>>> dis.dis(compile('''\
... if True:
...     foo
... ''', '<stdin>', 'exec'))
  1           0 LOAD_NAME                0 (True)
              3 POP_JUMP_IF_FALSE       13

  2           6 LOAD_NAME                1 (foo)
              9 POP_TOP             
             10 JUMP_FORWARD             0 (to 13)
        >>   13 LOAD_CONST               0 (None)
             16 RETURN_VALUE        

其中唯一的区别是附加到的行号LOAD_CONST字节码,因为第一个源示例中存在额外的行。

从风格上来说,else: pass只是混乱,降低可读性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python if 或 if/elif 语句末尾包含 else: pass 语句是最佳实践吗? 的相关文章

随机推荐

  • Java:如何确定正则表达式模式匹配失败的原因?

    我正在使用正则表达式来匹配模式是否匹配 但我也想知道它何时失败 例如 假设我有一个模式 N 1 3 Y 我将它与字符串 NNNNY 进行匹配 我想知道失败是因为N太多了 或者 如果我将其与字符串 XNNY 进行匹配 我想知道它失败是因为字符
  • 如何正确地在单词前面加上“a”和“an”?

    我有一个 NET 应用程序 给定一个名词 我希望它正确地为该单词添加 a 或 an 前缀 我该怎么做呢 在您认为答案是简单地检查第一个字母是否是元音之前 请考虑以下短语 一个诚实的错误 一辆二手车 下载维基百科 解压缩它并编写一个快速过滤程
  • 将base64图像数据转换为angularjs中的图像文件

    在 AngularJS 中将 Base64 文件转换为图像时文件损坏 任何人都可以建议我如何在 AngularJS 中将 Base64 文件转换为图像 我正在使用这种方法将base64文件转换为图像 var imageBase64 imag
  • 如何分割一个大的 xml 文件?

    我们将 记录 导出到 xml 文件 我们的一位客户抱怨该文件太大 他们的其他系统无法处理 因此 我需要拆分文件 同时在每个新文件中重复 标题部分 因此 我正在寻找一些东西 可以让我为应该始终输出的部分定义一些 xpath 并为 行 定义另一
  • 暂停,恢复时给出上次暂停的值

    我有一个热Observable由套接字供电 我可以使用pausable暂停套接字馈送 但是 一旦我 取消暂停 可观察对象 我需要显示在订阅暂停时套接字可能发送的最后一个值 我不想跟踪套接字手动发送的最后一个值 这怎么可能暂停 从文档中的示例
  • CBPeripheralManager startAdvertising 无法在 OS X yosemite 上运行

    使用您的 mac 运行 OS X 10 10 yosemite DP 6 作为 iBeacon 时有人注意到任何问题吗 我尝试了几种工具 也自己开发了它 使用 CBPeripheralManager startAdvertising 但没有
  • React-native-video 播放 Vimeo 和 YouTube

    我想知道是否可以通过 React Native 组件react native video 播放 Vimeo 和 YouTube 到目前为止 我的研究表明这几乎是不可能的 因为react native video需要直接引用文件 或流 而这些
  • 如何在 Delphi 中使用或解决视觉表单继承问题?

    我一直在 Delphi 7 中从事一个项目 我想让表单从其他表单继承组件 我能够完成这项工作 但遇到了以下问题 我将发布解决方案 希望将来能帮助其他人 在表单的 pas 文件中 我会将表单更改为从其他表单继承 但它不会从祖先表单获取组件 对
  • 如何转义任意字符串以用作 Windows 中的命令行参数?

    我有一个字符串列表 我想在单个 Windows 命令行调用中将这些字符串作为参数传递 对于简单的字母数字字符串 只需逐字传递它们就足够了 gt script pl foo bar baz yes no foo bar baz yes no
  • iPhone中的核心数据默认使用哪种持久存储

    我正在我的应用程序中创建多个持久存储 但我仅使用一个持久存储协调器和托管对象模型 现在我的问题是 当我在托管对象上下文上调用 save 方法时 它将使用哪个持久存储来保存对象 所以我想指定用于保存对象的持久存储 同样 在从数据库中获取对象时
  • 为什么Python中的对象不能添加属性? [复制]

    这个问题在这里已经有答案了 用Python shell编写 gt gt gt o object gt gt gt o test 1 Traceback most recent call last File
  • 向控制器提交多次调用的相同 Partial View 数据?

    我在我的视图中添加了一个按钮 单击此按钮后 将添加部分视图 在我的表单中 我可以添加尽可能多的部分视图 提交此表单数据时 我无法将所有部分视图数据发送到控制器 我制作了一个具有所有属性的不同模型 并且我已将该模型的列表添加到我的主模型中 谁
  • 在 C# 中实现方法装饰器

    In python是可以实施的function decorators扩展函数和方法的行为 特别是我正在迁移设备库python to C 与设备的通信可能会生成错误 应通过自定义异常重新引发错误 In python我会这样写 device e
  • 双倍到常量字符*

    如何将 double 转换为 const char 然后将其转换回 double 我想将双精度数转换为字符串 通过 fputs 将其写入文件 然后当我读取文件时 需要将其转换回双精度数 我正在使用 Visual C 2010 Express
  • 从 C 语言在 64 位汇编函数中传递参数。哪个寄存器接收这些参数?

    我想将参数从 C 传递给汇编函数 在类 UNIX 系统上 前六个参数为 rdi rsi rdx rcx r8 和 r9 在 Windows 上 前四个参数为 rcx rdx r8 和 r9 现在 我的问题是 在 BIOS 或 DOS 编程级
  • Opengl ES 2.0:获取纹理大小和其他信息

    问题的背景是Android环境中的OpenGL ES 2 0 我有质感 显示或使用都没有问题 有没有一种方法可以简单地从其绑定 ID 开始了解其宽度和高度以及其他信息 如内部格式 我需要在不知道纹理大小的情况下将纹理保存到位图 ES 2 0
  • javascript onbeforeunload 检测刷新或关闭

    使用以下函数可以检测用户拥有哪个按钮 按下刷新按钮或关闭按钮 如果没有还有其他办法吗 window bind beforeunload function event return pls save ur work 简单的答案是否定的 浏览器
  • 使用 next-auth 中间件防止经过身份验证的用户访问自定义登录页面

    我们目前正在使用 NextJS 13 开发一个应用程序next auth 到目前为止一切都很好 我们的应用程序使用自定义登录页面CredentialsProvider我们使用 next auth 中间件来保护我们的路由 我们希望阻止我们的用
  • 尝试在 SignalR ASP.NET Core 3.0 中使用 IAsyncEnumerable Catch

    尝试从 ASP NET Core 3 SignalR Hub 捕获顶级异常 这很棘手 因为我使用的是yield return 并且您不能将其包装在try catch 块中 它给出了这个编译器错误 CS1626 C 无法在带有 catch 子
  • 在 Python if 或 if/elif 语句末尾包含 else: pass 语句是最佳实践吗?

    如果我写 if a b do something elif a c do something else 我只是想通过 否则 最后是否需要写出以下内容 else pass 它似乎运行良好 没有else 口译员中的声明 是否有一个我不知道的原因