python - 在一行中使用一个表达式两次 - 作为字符串格式的条件和?

标签 python lambda formatting conditional

我发现在许多不同的项目中,我编写了很多代码,我需要评估一个(中等复杂,可能评估成本高昂)表达式,然后用它做一些事情(例如,将它用于字符串格式化),但前提是表达式为 True/non-None。

例如,在很多地方,我最终会执行以下操作:

result += '%s '%( <complexExpressionForGettingX> ) if <complexExpressionForGettingX> else ''

...我猜这基本上是想要返回表达式的某些函数的更普遍问题的特例,但前提是该表达式为真,即:

f( e() ) if e() else somedefault

但无需重新键入表达式(或重新评估它,以防它是一个昂贵的函数调用)。

显然,所需的逻辑可以通过各种冗长的方式很容易地实现(例如,通过将表达式拆分为多个语句并将表达式分配给一个临时变量),但这有点蹩脚,因为这看起来很通用问题,而且由于 python 非常酷(特别是对于函数式的东西),我想知道是否有一种很好、优雅、简洁的方法来做到这一点?

我目前最好的选择是定义一个短暂的 lambda 来处理它(比多个语句更好,但有点难以阅读):

(lambda e: '%s ' % e if e else '')( <complexExpressionForGettingX> )

或编写我自己的实用函数,例如:

def conditional(expr, formatStringIfTrue, default='')

...但由于我在许多不同的代码库中执行此操作,我宁愿使用内置库函数或一些聪明的 Python 语法(如果存在这样的东西)

最佳答案

我绝对喜欢单线。但有时它们是错误的解决方案。

在专业软件开发中,如果团队规模 > 2,那么您花在理解别人编写的代码上的时间比编写新代码的时间要多。此处介绍的单行语句绝对令人困惑,因此只需执行两行(即使您在帖子中提到了多个语句):

X = <complexExpressionForGettingX>
result += '%s '% X  if X else ''

这很清楚,简洁,每个人都会立即明白这里发生了什么。

关于python - 在一行中使用一个表达式两次 - 作为字符串格式的条件和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337236/

相关文章:

python - Scrapy - 如何识别已经抓取的网址

python - 改变方程的 ast.NodeTransformer 示例

Python请求登录

python - 然后使用 Python 求和一串字符串中的平均值

c++ - unique_ptr<T> 用于数组特化的 lambda 自定义删除器

c# - 如何将值从mysql传递到c#变量并保留两位小数

node.js - 如何在无服务器框架上包含静态文件?

c# - Lambda 表达式 `x => x.Property` 更改为 `x => Convert(x.Property)`

Xcode源码自动格式化

javascript - 谷歌可视化 API : how to apply a pattern on addColumn