在所有情况都返回的情况下,这些确实是等效的。在它们之间进行选择时变得重要的是更具可读性。
您的后一个示例使用该elif
结构来明确声明案例是互斥的,而不是依赖于案例是从收益中隐含的事实。这使得该信息更加明显,因此代码更易于阅读,并且不易出错。
举例来说,某人认为还有另一种情况:
def example(x):
if x > 0:
return 'positive'
if x == -15:
print("special case!")
if x < 0:
return 'negative'
return 'zero'
突然,如果用户希望这种情况是互斥的,则存在潜在的错误(显然,对于示例而言,这没有多大意义,但在更现实的情况下可能会发生)。如果使用elif
s,则消除了这种歧义,并且使行为对于添加代码的人员可见(在他们添加代码时可能正在查看的级别)。
如果我遇到第一个代码示例,则可能会假设使用if
s而不是elifs
暗含案例 并非是 互斥的,因此诸如更改value之类的事情x
可能会用于更改if
s的执行(显然在这种情况的意图是显而易见的,并且是相互排斥的,但是再说一次,我们谈论的是不太明显的情况- 一致性很好,因此,即使在一个简单的例子中,显而易见的情况下,最好还是坚持一种方式。