【问题标题】:Why elif statement instead of if statement? [duplicate]为什么使用 elif 语句而不是 if 语句? [复制]
【发布时间】:2016-12-08 00:57:49
【问题描述】:

为什么我应该使用 elif 而不是一遍又一遍地使用 if 语句。 我找不到关于此事的任何文件。提前谢谢你。

【问题讨论】:

  • 只有在 >= 3 个条件并且其中一个是 else 时才真正需要它
  • 一个重要的原因是多个if 语句被认为是独立的语句,因此无论一个是否通过链中的条件,每个语句都会被检查。在if-elif 链中,如果任何语句通过,则条件检查结束。
  • @PaulH 不一定,有很多充分的理由使用 if / elif 而没有 else,即使只有 2 个条件
  • @Yvette 这是multiplequestions的骗子。
  • 我在先前问题的答案中找不到任何地方是 Python 使用强制缩进与 elif 确实需要这一事实之间的联系(正如我的回答中所解释的那样,与例如在 C 中相反, C++、Java 和 JavaScript)。这也是 C/C++ 预处理器需要 #elif 而语言本身没有 elif 的原因。所以也许我们可以认为这个问题不是一个有很多完整答案的完全重复的问题。

标签: python


【解决方案1】:

elif 语句仅在第一个 if 语句为 false 时才称为它。考虑以下示例:

if foo==2:
   print("foo is exactly 2")
elif foo%2 == 0:
   print("foo is not 2 but divisible by 2")

如果您使用两个 if 语句,在 foo==2 的情况下,两个消息都会被打印出来。

【讨论】:

    【解决方案2】:

    Python 有一个 elif,而其他使用 {} 来分隔块的语言没有,这就是缩进。 如果没有它,在某些情况下你将不得不有一个非常宽的屏幕......

    你必须写:

    if a:
        pass
    else:
        if b:
            pass
        else:
            if c:
                pass
            else:
                pass
    

    然后:

    if a:
        pass
    elif b:
        pass
    elif c:
        pass
    else:
        pass
    

    不使用强制缩进的语言将允许您编写:

    if (a) {
        // pass
    }
    else if (b) {
        // pass
    }
    else if (c) {
        // pass
    }
    else {
        // pass
    }
    

    【讨论】:

      【解决方案3】:

      考虑第一组if/elif和第二组ifs之间的区别:

      x = 0
      
      if x == 0:
          print("Zero")
      elif x % 2 == 0:
          print("Even")
      elif x % 2 == 1:
          print("Odd")
      
      print('---')
      
      if x == 0:
          print("Zero")
      if x % 2 == 0:
          print("Even")
      if x % 2 == 1:
          print("Odd")
      

      首先,输出只会是:

      Zero
      

      在第二个中,输出将是:

      Zero
      Even
      

      通过使用if/elif,一旦满足条件,将跳过该“阶梯”的其余部分。通过使用一堆单独的ifs,每个都会被测试,单个变量可以满足多个条件(就像x在这里所做的那样)。

      每个都有原因,但了解差异很重要

      【讨论】:

      • 谢谢。为了挽救我的生命,我找不到任何理由。我知道这是最佳做法,但我不明白为什么。再次感谢!!!!
      【解决方案4】:

      当你写作时:

      if a:
          do_something1()
      if b:
          do_something2()
      

      这两个条件是相互独立的。因此,如果ab 的计算结果都为True,则将同时调用do_something* 函数。如果你写

      if a:
          do_something1()
      elif b:
          do_something2()
      

      那么如果a 的计算结果为True,那么do_something1 将被调用,但do_something2 不会被调用——即使b 也是如此。因此elif 构造允许您轻松指定互斥条件。

      【讨论】:

        【解决方案5】:

        如果您希望执行一个且只有一个案例,请使用ifelifelse。换句话说,这些案例是相互排斥的。

        它还允许短路逻辑。在找到elif 的第一个ifTrue 后,您可以跳过检查以下所有情况的条件。如果您只是有一系列 if 语句,那么无论如何您都必须检查它们的所有条件。

        【讨论】: