【问题标题】:More than one if-else in single line, how to interpret them?单行中有多个 if-else,如何解释它们?
【发布时间】:2016-10-22 18:10:55
【问题描述】:

嗯,我当然明白 if-else 是在单行中返回的

return 0 if x==y else 1

翻译成

if x==y:
    return 0
else:
    return 1

我对那些 if-else 在一行中多次出现的语句感到困惑,例如

def cmp(x, y):
    return 0 if x == y else 1 if x > y else -1

如何解释和理解单行编写的 if-else 语句。

【问题讨论】:

    标签: python python-3.x if-statement


    【解决方案1】:

    引入括号更容易理解。

    0 if x == y else 1 if x > y else -1
    

    必须被解析为

    0 if x == y else (1 if x > y else -1)
    

    【讨论】:

    • 这是一个很好的答案,因为它说明了对于更复杂的表达式(如 A if cond1 else (B if cond2 else (C if cond3 else (D))))的工作原理,尽管您通常应该尽可能避免这样的事情。
    • @ChronoKitsune though you should generally avoid things like that when possible 是的,但是当我浏览大多数 python 库时,它们都充满了这类语句。
    • @Rakesh_K 是的,这是真的。如果你有一长串像这样的单行 if-else 语句,那么通过使所有内容更清晰来提高可读性通常是一个更好的主意。根据 Python 之禅 (import this) 的说法:“稀疏胜过密集”,“如果实现容易解释,可能是个好主意”。当你开始把这样的东西加长时,它会变得更复杂,这意味着你可能会考虑改变它,因为“简单胜于复杂”和“可读性很重要”。有时复杂性是有充分理由的,所以禅宗并不禁止它。
    【解决方案2】:

    它是嵌套的 else-if ,为了清楚起见可以看成这样

     if x == y:
         return 0
     else:
         if x > y: 
            return 1 
         else: 
            return -1
    

    如果代码清晰且易于理解,并且尽可能少的努力,那就太好了

    所以稍后,如果您想在冗长的条件语句中再添加一个案例,那么可能会出现问题,因此更好的选择是使用 elif 这样的阶梯

    def _comp(total):
        if total>90:
            return 'Python lover'
        elif total>80 and total<=89:
            return 'Friend of python'
      #     elif total>50 and total<=79      added later easily
      #         return 'you like python'     added later easily
        else:
            return 'python is waiting for you'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 2021-12-25
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      相关资源
      最近更新 更多