条件变量初始化的Pythonic方式是什么?

2024-03-27

由于 Python 的作用域规则,所有在某个作用域内初始化的变量此后都可用。由于条件不会引入新的作用域,因此不一定需要其他语言中的构造(例如在该条件之前初始化变量)。例如,我们可能有:

def foo(optionalvar = None):
    # some processing, resulting in...
    message = get_message()
    if optionalvar is not None:
        # some other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message

或者,我们可以改为:

def foo(optionalvar = None):
    if optionalvar is None:
        # processing, resulting in...
        message = get_message()
    else:
        # other processing, resulting in...
        message = get_other_message()
    # ... rest of function that uses message

当然,get_message and get_other_message函数可能有很多行代码,并且基本上是不相关的(您可以假设每条路径之后程序的状态是相同的);这里的目标是message准备好在本部分功能之外使用。

我在其他问题中多次看到后一种结构,例如:

  • https://stackoverflow.com/a/6402327/18097 https://stackoverflow.com/a/6402327/18097
  • https://stackoverflow.com/a/7382688/18097 https://stackoverflow.com/a/7382688/18097

哪种结构更容易被接受?


Python 还有一个非常有用的 if 语法模式,您可以在此处使用

  message = get_other_message() if optional_var else get_message()

或者如果你想与 None 严格比较

  message = get_other_message() if optional_var is not None else get_message()

与示例 1) 不同,您发布的内容不会不必要地调用 get_message() 。

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

条件变量初始化的Pythonic方式是什么? 的相关文章

  • AttributeError:'function'对象在pandas中没有属性'bar'

    我有一个 pandas 数据框 它是 pandas 数据框类型 如下所示 type df Out 176 pandas core frame DataFrame 但是 当我尝试在此数据框上使用任何绘图函数 如条形图 时 会出现如下错误 df
  • 如何更改默认的Python版本?

    我已经在我的 Mac 上安装了 Python 3 2 我跑完之后 Applications Python 3 2 Update Shell Profile command 当我输入时 这很令人困惑Python V在终端它说Python 2
  • 区分大小写的实体识别

    我的关键字全部以小写形式存储 例如 折扣耐克鞋 我正在尝试对其执行实体提取 我遇到的问题是 spaCy 在 NER 方面似乎区分大小写 请注意 我不认为这是 spaCy 特有的 当我跑步时 doc nlp u i love nike sho
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • Python函数组成

    我尝试使用良好的语法来实现函数组合 这就是我所得到的 from functools import partial class compfunc partial def lshift self y f lambda args kwargs s
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • Django 1.7 应用程序配置导入错误:没有名为 appname.apps 的模块

    我正在尝试按照以下文档为我的一个名为 文章 的 Django 应用程序设置自定义应用程序配置https docs djangoproject com en dev ref applications https docs djangoproj
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 异步异常处理程序:在事件循环线程停止之前不会被调用

    我正在我的异步事件循环上设置异常处理程序 但是 在事件循环线程停止之前 它似乎不会被调用 例如 考虑以下代码 def exception handler loop context print Exception handler called
  • 通过新数据更新绘图,而不是在 Jupyter 笔记本中制作新绘图

    我有一些问题 希望你能帮我解决 我需要使用下拉小部件创建交互式绘图 我可以在其中选择并绘制感兴趣的数据 我通过以下方式做到这一点 import plotly graph objects as go import ipywidgets as
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示

随机推荐

  • Azure:从应用服务访问 Key Vault 时如何修复“策略要求调用者‘...’使用代表 (OBO) 流”?

    我有一个在 Azure 应用服务中运行的 ASP net Core 3 1 应用程序 开始使用 Azure Key Vault 存储应用程序的连接字符串和其他机密后 该应用程序现在崩溃并显示以下错误 HTTP 错误 500 30 ANCM
  • 从 serverless.yml 中引用函数

    我有几个正在运行的 AWS lambda 由无服务器框架 我需要一个 lambda 称为lambdaOne 这将调用第二个 lambda 称为lambdaTwo 使用 AWS 的 javascript sdk 问题是我得到了AccessDe
  • RDF和OWL工作流程问题

    我一直在通过 Protege 查看和使用 OWL 我想知道我是否正确理解 工作流程 和它的想法 从头开始构建数据库 使用 Protege 或等效工具为您的数据生成 OWL 本体 将此模式导出为 RDF 使用定义为三元组中的某些元素的类以及目
  • .NET 在为 WCF 服务生成类型时加载并寻找另一个版本的程序集

    我在 Visual Studio 2013 中尝试向 ASP NET Web 应用程序添加服务引用时遇到此错误 我在项目中引用了 Microsoft Owin Security 版本 2 1 0 0 但我很沮丧为什么他要寻找2 0 1 0版
  • 使用数据库优先方法为 Entity Framework 5 中的所有实体创建基类

    我在每个表上都有一些属性 例如 CreatedDate ModifiedDate VersionNo 每次修改实体时 我都需要更改 添加这些属性的值 我认为我可以使用这些属性创建一个基类 并让实体从该基类派生 并且在基于 ObjectSta
  • 每个数据库名称 Ansible 运行一次任务

    我正在使用 ansible 将多个站点部署到同一服务器 每个站点都是 ansible 中的一个单独的 主机 hosts库存 效果非常好 但是 只有两个数据库 生产数据库和测试数据库 如何确保每个数据库只运行一次数据库迁移任务 我读过grou
  • 可以弹簧@Autowired Map吗?

    这是地图 Autowired private Map
  • Google appengine blobstore 上传处理程序处理额外的表单发布参数

    我希望有一个文件上传表单 除了文件选择输入之外 还具有其他输入字段 如文本区域 下拉列表等 问题是我无法访问除 blobstore 上传处理程序中的文件之外的任何发布参数 我使用以下函数调用来获取参数名称 但它始终返回空屏幕 par sel
  • PHP 中的 HTTP_HOST 和 SERVER_NAME 有什么区别?

    有什么区别 SERVER HTTP HOST and SERVER SERVER NAME in PHP 您什么时候会考虑使用其中一种而不是另一种 为什么 The HTTP HOST是从获得HTTP 请求头 http www w3 org
  • popToRootViewControllerAnimated 并释放所有视图

    我有一个 UINavigationController 它要求提供一些信息 用户导航直到最后 一旦到达那里 他们就可以接受或取消所有已输入的数据 他们选择哪个选项并不重要 因为他们总是会使用 UINavigationController p
  • 统一更新:使用本地文件的更新更新私有存储库(重构、重命名、更新)并从原始存储库获取定期更新

    我刚刚开始学习 Windows 上的 GitHub CLI 工具 认为我是新手 我有一个如下所示的用例 在深入探讨之前 让我先总结一下 我的用例是 克隆一个开源项目 它更新 定期 即创建它的本地副本并进行修改 包括 重命名文件和文件夹 将更
  • 准备重用

    有人可以告诉我如何使用prepareForReuse吗 我已经搜索了几个小时并阅读了开发文档 在扩展 UITableViewCell 的自定义单元中 我有prepareForReuse 方法及其被调用 但我该如何处理它 存在渲染问题 我这样
  • 有没有办法让无线电组水平布局?

    我在单选按钮组内有 2 个单选按钮 现在它们垂直排列 我尝试将它们放入水平容器中 但没有用 有没有办法让一组单选按钮水平排列
  • 在当前位置插入文本 TINYMCE IE9

    如何将文本插入到tinyMce编辑器的当前位置 它在 Chrome FF Safari 中完美运行 但在 IE 中它始终从文本区域的顶部开始 我目前执行以下操作 tinyMCE execCommand mceInsertContent fa
  • 如何在c中创建一个n维数组

    我正在考虑编写一个函数 它接受 n 个参数并使用这些参数作为维度返回一个 n 维数组 现在我意识到一维和二维数组很容易用指针实现 对于二维数组 片段将类似于 标准方式 int x int temp x int malloc m sizeof
  • TCP SOCKET 句柄可以继承吗?

    在 Windows 上 大多数类型的句柄都可以由子进程继承 期望 TCP 套接字也可以被继承 但是 当安装某些分层服务提供商时 这不会按预期工作 赛门铁克的 PCTools 等 A V 产品曾经导致我们的客户应用程序出现问题 按照微软构建W
  • 重构 AutoHeightWebView 库以获取在单独的浏览器中打开的超链接

    我有一个已升级的 React Native 应用程序 回到旧时代 如果您访问一篇新闻文章 该文章有超链接 并且您单击了超链接 它会将您重定向到手机浏览器并打开那里的链接 但它不再这样做 因为我们必须升级react native autohe
  • 警告:条件中的字符串文字

    使用下面的第一段代码我收到两条警告消息 warning string literal in condition x2 if input N n do this else input L l do this 而不是使用它 这不会导致任何警告
  • 如何在 VS2012 MVC4 项目中设置 Ext.NET 2.0?

    我非常怀疑我的问题是否会得到解答 但我会在这里尝试 因为我的挫败感如此之高 也许这会帮助我自己降低它们 所以 我想做的是 从头开始安装 VS2012 好吧 点击 exe 即可开始 创建一个新的MVC4项目 使用 Razor View Eng
  • 条件变量初始化的Pythonic方式是什么?

    由于 Python 的作用域规则 所有在某个作用域内初始化的变量此后都可用 由于条件不会引入新的作用域 因此不一定需要其他语言中的构造 例如在该条件之前初始化变量 例如 我们可能有 def foo optionalvar None some