【问题标题】:Nesting the ternary operator in Python在 Python 中嵌套三元运算符
【发布时间】:2013-11-07 21:21:33
【问题描述】:

在 Python 之禅中,Tim Peters 指出 Flat is better than nested.。如果我理解正确,那么在 Python 中是这样的:

<statement-1> if <condition> else <statement-2>

通常比这个更受欢迎:

if <condition>:
    <statement-1>
else:
    <statement-2>

但是,在其他语言中,有人告诉我不要嵌套三元运算符,而是使用传统的if...else。那么,我的问题是我应该使用这个:

(<statement-1> if <condition-1> else <statement-2>) if <condition-2> else <statement-3>

if <condition-2>:
    if <condition-1>:
        <statement-1>
    else:
        <statement-2>
else:
    <statement-3>

?特别是如果语句和条件很长,并且第一行需要拆分?

【问题讨论】:

  • 我会使用第二个:它更清晰,更易于维护。我不太确定他的意思。
  • 同意第二个。
  • 请使用第二个。看了-零-字就可以理解了;缩进传达了所有信息。
  • 这可能被解释为你应该尽量不要嵌套你的 ifs——也许有 if :\n \n elif 而不是 :\n \n else:\n
  • 三元运算符用于组合表达式,而不是语句(语法错误)。

标签: python nested-statement


【解决方案1】:

您的 first 示例(可怕的单线)也是嵌套的。水平嵌套。您的第二个示例是垂直嵌套的。它们都是嵌套的。

那么哪个更好?第二个!为什么?因为“稀疏胜于密集”打破了平局。

当你是 Tim Peters 时,这很容易 - LOL ;-)

【讨论】:

  • 不公平,我们不可能都是蒂姆·彼得斯!我们只能努力去追求。
【解决方案2】:

“平面优于嵌套”是关于模块组织和数据结构的,而不是你的源代码。例如,标准库大多作为顶层模块存在,嵌套很少。

不要嵌套三元运算符,如果可以避免的话,也不要使用它。复杂胜于复杂。 :)

【讨论】:

  • 我不同意“如果可以避免的话,甚至可以使用它”——如果使用得当的话,这是一个很好的语法。
  • @Ben 以我的经验:如果周围的代码很简单,那么三元对你的影响不大。如果周围的代码很复杂,三进制会更糟。
  • 我喜欢在返回值取决于简单测试的返回语句中使用它。
  • 三元运算符是 fp 的一部分。请使用。
【解决方案3】:

据我了解,这是“更平坦”:

if <condition_2> and <condition_1>:
  <statement_1>
elif <condition_2>:
  <statement_2>
else:
  <statement_3>

检查条件的顺序很重要,例如如果您将&lt;condition_2&gt; 仅作为检查的第一顺序,那么&lt;statement_1&gt; 将永远不会被调用。

【讨论】:

  • 如果条件涉及更多级别的嵌套,则更是如此;我认为这是最合理的选择之一。
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多