这种三元条件有更好的解决方案吗?
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
【讨论】:
以上是关于这种三元条件有更好的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章