【问题标题】:Break one line of "if else" statement into multiple lines [duplicate]将一行“if else”语句分成多行[重复]
【发布时间】:2017-02-06 18:43:35
【问题描述】:

我想破解这段代码:

ex = func(object) if not self.is_object() else foo()

到多行(pep 8)。 最好的方法是什么? 我想到了这个:

ex = func(object) \
    if not self.is_object() \
    else foo()

但这似乎有点难看,也不是很整洁。还有其他方法吗?

编辑:这与仅仅将一行分成多行不同,因为这是一个特殊的“表达式 if stmnt else stmnt”,而不仅仅是破坏任何 python 代码。

【问题讨论】:

  • 没什么特别的;它只是一个三元运算符... if ... else ...,而不是一个二元运算符... + ...

标签: python python-2.7 pep8


【解决方案1】:

如果它不适合一行,最好将其分解为一个 if 语句:

if self.is_object():
    ex = foo()
else:
    ex = func(object)

或者你可以使用括号:

ex = (func(object)
       if not self.is_object()
       else foo())

【讨论】:

    【解决方案2】:

    如果您绝对必须避免使用三元表达式(很多人似乎不喜欢它们),那么规范方法会更简洁:

    if self.is_object():
        ex = foo()
    else:
        ex = func(object)
    

    它的优点是任何 Python 程序员都可以阅读它,而不用想知道到底发生了什么!

    【讨论】:

      【解决方案3】:

      这里到底有什么丑陋之处?反斜杠?有一种方法可以避免它们
      要将语句拆分为多行,请在条件周围使用括号,如下所示:

      ex = (func(object)
            if not self.is_object()
            else foo())
      

      但也许写一个完整的条件结构会更好:

      if not self.is_object():
          ex = func(object)
      else:
          ex = foo()
      

      【讨论】:

      • 我认为你是对的。我会保持正常的方式。谢谢。
      【解决方案4】:

      将其分成多行的最佳方法如下:

      if not self.is_object():
          ex = func(object)
      else:
          ex = foo()
      

      如果您不需要将其包含在单个表达式中,您不妨使用传统的 if..else 块。

      【讨论】:

        猜你喜欢
        • 2015-05-16
        • 2017-10-28
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多