这种三元条件有更好的解决方案吗?

Posted

技术标签:

【中文标题】这种三元条件有更好的解决方案吗?【英文标题】:Is there a better solution for this ternary condition? 【发布时间】:2011-10-18 09:29:18 【问题描述】:

想象以下三元条件:

foreground = self.foreground if self.foreground else c4d.COLOR_TRANS

在这种情况下,我需要调用self.foreground 两次来检查它是否 True。 有没有只需要调用一次的方法?

【问题讨论】:

除非这需要很长时间,否则我会保持原样 - 它比 foreground = self.foreground or c4d.COLOR_TRAN 更具可读性,而且你现在拥有它的方式意味着它是完全显而易见的在。 “打字更短”的方法看起来很混乱。此外,如果您的那一行 评估时间过长,我建议修复 self.foreground 以减少调用时间,而不是更改此行。 【参考方案1】:

等价的表达式是

foreground = self.foreground or c4d.COLOR_TRANS

【讨论】:

...因为 Python 的逻辑运算符不只是返回布尔值;他们为您提供了导致他们下定决心的实际价值。 (例如,如果 a 为真,则 a or b 计算为 a(不是 True),否则计算为 b 如果两者都为false,则有问题。在 if-else 子句中没有。 @BrainStorm,抱歉,有什么问题? 0 or '' => ''. @BrainStorm, '' or None => None. @senderle,对这个好评论 +1,我不知道! :D【参考方案2】:

您可以使用布尔运算符:

foreground = self.foreground or c4d.COLOR_TRANS

【讨论】:

以上是关于这种三元条件有更好的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

你试过不用if写代码吗?

Python有三元条件运算符吗?

Python有三元条件运算符吗?

Django 模板三元运算符

python Python有三元条件运算符吗?

使用 JavaScript 和 Google Gears 处理文件上传,有更好的解决方案吗?