如果否则返回练习

时间:2013-02-13 06:24:59

标签: python

Noob问题我知道,但我需要确认,因为这种情况经常发生在我身上。如果您知道在前一个块为真时未达到代码,那么使用elif:是否有任何意义?例如

if foo:
  return x
elif bar:
  return y

应该是:

if foo:
  return x
if bar:
  return y

5 个答案:

答案 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语句。