小编Ben*_*ler的帖子

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

我发现在许多不同的项目中,我正在编写大量代码,我需要评估一个(中等复杂,可能代价高昂的评估)表达式然后用它做一些事情(例如用它来进行字符串格式化),但是仅当表达式为True/non-None时.

例如,在很多地方我最终会做如下的事情:

result += '%s '%( <complexExpressionForGettingX> ) if <complexExpressionForGettingX> else ''
Run Code Online (Sandbox Code Playgroud)

...我想这基本上是一个特殊情况,想要返回一个表达式的某些函数,但只有当该表达式为True时,即:

f( e() ) if e() else somedefault
Run Code Online (Sandbox Code Playgroud)

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

显然,所需的逻辑可以通过各种冗长的方式轻松实现(例如,通过将表达式拆分为多个语句并将表达式分配给临时变量),但这有点蹩脚,因为这似乎是一个非常普遍的问题,并且因为python非常酷(特别是对于功能性的东西)我想知道是否有一个漂亮,优雅,简洁的方法来做到这一点?

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

(lambda e: '%s ' % e if e else '')( <complexExpressionForGettingX> )
Run Code Online (Sandbox Code Playgroud)

或编写我自己的实用功能,如:

def conditional(expr, formatStringIfTrue, default='')
Run Code Online (Sandbox Code Playgroud)

...但是由于我在许多不同的代码库中执行此操作,我更倾向于使用内置库函数或一些聪明的python语法(如果存在这样的事情)

python formatting lambda conditional

8
推荐指数
2
解决办法
1039
查看次数

标签 统计

conditional ×1

formatting ×1

lambda ×1

python ×1