1

我知道菜鸟问题,但我需要确认它,因为这经常发生在我身上。elif:如果您知道当前一个块为真时不会到达代码,那么使用有什么意义吗?例如。

if foo:
  return x
elif bar:
  return y

应该只是:

if foo:
  return x
if bar:
  return y
4

5 回答 5

7

我可以看到至少三个喜欢的理由if/elif

  • 它向代码的读者清楚地表明,作者希望条件是互斥的
  • 如果稍后重构代码,将早期返回更改为单个延迟返回,则语义if/elif不会中断,但if/if可能
  • 它使代码风格与您正在使用的其他代码库保持一致

至少有两个选择的理由if/if

  • 打字少了
  • 它使代码风格与您正在使用的其他代码库保持一致

也就是说,这里有一些推荐阅读:

于 2013-02-13T06:29:13.160 回答
3

python解释器没有任何区别;事实上,这两个代码片段将在内部编译为相同的指令(编译器足够聪明,知道永远不会到达返回后的代码,并将else完全优化部分。)。

这是风格和可读性的问题。

于 2013-02-13T06:29:01.030 回答
1

从 Python 解释器的角度来看,不,没有区别——或者至少在执行方面没有区别,尽管这两种构造的实现方式可能存在一些细微的差异。

但请记住,您不仅要写信给口译员,还要写信给口译员。您正在为其他程序员编写以便稍后阅读您的代码。写下你认为最清楚你的意图的任何东西。

于 2013-02-13T06:29:51.047 回答
1

如果您知道这不是真的,那么不要浪费口译员的时间来检查它。如果你使用if它,每次都会被评估;但是,只有在前一个条件是elif时才会评估。在这种情况下,您使用的是,因此您应该避免这种情况,但是根据返回更改逻辑流程是不好的。您应该拥有尽可能少的(最好只有一个)代码路径。此外,它提供了一个干净、可读的结构,并使代码路径明确。可读性很重要,显式优于隐式。ifFalsereturn

于 2013-02-13T06:31:06.480 回答
0

多条IF语句意味着您的代码将检查所有IF条件,而在 的情况下elif:,如果满足一个IF条件,则不会检查其他条件。(正如已经向我指出的那样,只有在没有任何IF语句必须return来自代码块的情况下,这才是正确的)

在您的情况下,可以使用 multipleIF语句。

于 2013-02-13T06:28:41.797 回答