Python等效于省略三元运算符的第二部分(a if a else b)

Posted

技术标签:

【中文标题】Python等效于省略三元运算符的第二部分(a if a else b)【英文标题】:Python equivalent of omitting second part of ternary operator (a if a else b) 【发布时间】:2020-08-28 18:16:12 【问题描述】:

在某些语言(我认为是 php 和 Java)中,您可以省略三元运算符的第二部分:

a = "This is a string"
result = a ? : False

上面应该等价于

a = "This is a string"
result = a ? a : False

我想缩短以下(简化)python 代码中的三元运算符:

def myFunc():
   return "This string could be empty, but now it's not."

result = myFunc() if myFunc() else False
print(result)

如果字符串不为空,这将打印字符串,但如果为空,则打印 False。

我希望它更短的原因是因为现在我必须调用 myFunc() 两次而不是一次,如果您能够像在其他语言中那样省略其中一个。

当然,我可以将 myFunc() 分配给一个变量并在三元运算符中使用该变量两次,但这会使它再次变大。

在 python 中有没有简单的方法来做到这一点?或者这是不可能的?

【问题讨论】:

“当然,我可以将 myFunc() 分配给一个变量并在三元运算符中使用该变量两次,但这会使它再次变大。”所以呢?只需将其分配给一个变量。 【参考方案1】:

您可以在此处使用or,因为空字符串的计算结果为 Falsey:

result = myFunc() or False

参考Truth Value Testing

【讨论】:

我测试过,这正是我想要的!我不明白为什么这行得通?结果不应该是 True 而不是返回字符串的值,因为非空字符串将评估为 True ,这将使语句:result = True or False 这将是 True? 这是一个条件语句。它检查左侧参数的真值,如果为真,则返回其值,否则返回右侧的值。有关更多信息,请参阅PEP-0308。

以上是关于Python等效于省略三元运算符的第二部分(a if a else b)的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 等效于三元运算符 [重复]

第二部分 位运算符赋值运算符三元及一元运算符和语句分类

三元运算符可以等效于与逻辑运算符的短路吗?

而其他语句等效于Java?

python基础

python第二部分