【问题标题】:if, elif and else.. priority and chainsif、elif 和 else.. 优先级和链
【发布时间】:2018-10-14 07:22:13
【问题描述】:

我一直对 Python 有这种好奇心,找不到明确的答案,也许有人可以帮助我 “if”、“elif”和“else”的优先级和工作方式是什么? 如果我这样做:

if conditionA:
    do something
elif conditionB:
    do something else
else:
    do something else

“else”是检查“elif”中的条件还是同时检查“if”和“elif”两个条件? 是否有任何有趣的顺序可以使用它们(例如 if、else、elif、else 等)? 谢谢

【问题讨论】:

  • 这里解释得很好:docs.python.org/2/tutorial/controlflow.html。必须恰好有一个 if,然后是零个或多个 elif,然后是零个或一个 else 语句。
  • 如果您只是大声说出逻辑,那么 priority 是什么应该非常明显。 如果条件 A 为真,则执行操作 A。否则,如果条件 B 为真,则执行操作 B。否则,执行操作 C
  • 如果你必须问,下一个阅读你的代码的人也必须问(下一个很可能就是你!)。我建议不要使用任何很少使用以至于不会立即被理解的东西,而是使用更详细的代码使其更清晰(可能涉及代码部分或将部分分解为命名良好的方法)。
  • 谢谢大家!帮助

标签: python if-statement


【解决方案1】:

else 是所有 ifelif 语句都是错误的。放在中间会是语法错误。

不要想到else“检查条件”。把它想象成如果其他人是真的,控制流甚至永远不会到达else。多个elif也是如此。

考虑一下:

if False:
    print 'first'
elif True:
    print 'second'
elif True:
    print 'third'

即使third 也不会打印,因为第二个是真的。第三个是真的无关紧要,因为它甚至没有被评估。

如果您正在调用函数,这也会产生一些副作用:

if send_email(to_coworker):
    pass
elif send_email(to_boss):
    pass

假设如果函数成功返回True,那么只有在给你同事的电子邮件失败时才会发送给你老板的电子邮件,即使需要调用该函数来评估 elif 条件

【讨论】:

    【解决方案2】:

    它们按照在文件中遇到的顺序进行处理。

    if True:
      # Always executes.
    elif False:
      # Is never checked.
    else:
      # We never get this far, either.
    

    一旦遇到第一个计算为 True 的条件,就会执行相应的代码块。不检查附加条件。

    【讨论】:

      【解决方案3】:

      它们本身没有优先级,真正重要的是顺序,因此将检查第一个条件,如果第一个条件为 False,则检查第二个条件,依此类推,直到任何条件为 True 或执行else 语句当且仅当所有条件都为 False

      在您的示例中,如果 conditionA 为 True,则 if 语句中的代码将被执行,而 elif 和 else 条件根本无关紧要。

      如果条件A 为假且条件B 为真,则将执行elif 语句中的代码。

      最后只有当conditionA和conditionB为False时才会执行else块内的代码

      【讨论】:

        猜你喜欢
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多