if、elif 和 else 的优先级与链条
我一直对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
是在所有的 if
和 elif
条件都不成立时的“兜底”选项。如果把它放在中间,就会出现语法错误。
不要把 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
条件。