Noob问题我知道,但我需要确认,因为这种情况经常发生在我身上。如果您知道在前一个块为真时未达到代码,那么使用elif:
是否有任何意义?例如
if foo:
return x
elif bar:
return y
应该是:
if foo:
return x
if bar:
return y
答案 0 :(得分:7)
至少有三个理由可以选择if/elif
:
if/elif
的语义不会中断,但if/if
可能至少有两个理由更喜欢if/if
:
那就是说,这里有一些推荐阅读:
答案 1 :(得分:3)
python解释器没有任何区别;事实上,这两个代码片段将在内部编译为相同的指令(编译器足够聪明,知道返回后的代码永远不会到达,并将完全优化else
部分。)。
这是一种风格和可读性问题。
答案 2 :(得分:1)
从Python解释器的角度来看,没有,没有区别 - 或者至少在执行方面没有区别,尽管这两种结构的实现方式可能存在一些细微差别。
但请记住,您不仅仅是在向口译员写作;你正在写其他程序员以后再阅读你的代码。写下你认为最清楚的意思。
答案 3 :(得分:1)
如果你知道这不是真的,那么不要浪费翻译的时间来检查它。如果您使用if
,则每次都会对其进行评估;但是,只有先前elif
条件为if
时才会评估False
。在这种情况下,您使用return
,因此您应该安全,但通过更改基于返回的逻辑流程是不好的。您应该尽可能少(最好只有一个)代码路径。此外,它提供了一个干净,可读的结构,并使代码路径显式。可读性计数,显式优于隐式。
答案 4 :(得分:0)
多个IF
语句表示您的代码将检查所有IF
条件,而在elif:
的情况下,如果一个IF
条件满足,则不会检查其他条件。 (正如我已经指出的那样,如果IF
语句都没有return
来自代码块,那么这只是真的。
在您的情况下,可以使用多个IF
语句。