if、elif 和 else 的优先级与链条

1 投票
3 回答
7663 浏览
提问于 2025-04-18 05:51

我一直对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等等)?

谢谢!

3 个回答

1

这些条件本身没有优先级,真正重要的是检查的顺序。首先会检查第一个条件,如果第一个条件是假的,就会检查第二个条件,以此类推,直到有一个条件为真,或者如果所有条件都是假的,就会执行else语句。

在你的例子中,如果conditionA为真,那么if语句里面的代码会被执行,elif和else的条件就不重要了。

如果conditionA为假,而conditionB为真,那么elif语句里面的代码会被执行。

最后,只有当conditionA和conditionB都为假时,else块里面的代码才会被执行。

1

它们会按照在文件中出现的顺序进行处理。

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

一旦遇到第一个条件为真的情况,就会执行对应的代码块。后面的条件就不再检查了。

8

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 条件

撰写回答