【问题标题】: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 以减少调用时间,而不是更改此行。

标签: python if-statement variable-assignment ternary


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2010-11-08
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多