Python,为什么elif关键字?

我刚开始Python编程,我想知道关于elif关键字。

其他编程语言我用过之前使用else if 。 有没有人有一个想法,为什么Python开发人员添加额外的elif关键字?

为什么不:

 if a: print("a") else if b: print("b") else: print("c") 

最有可能的是它的语法糖。 像Visual Basic的Wend一样。

据我所知,这是为了避免过度缩进。 你可以写

 if x < 0: print 'Negative' else: if x == 0: print 'Zero' else: print 'Positive' 

 if x < 0: print 'Negative' elif x == 0: print 'Zero' else: print 'Positive' 

就好多了


感谢文档的参考:

关键字elif是“else if”的缩写,对于避免过多缩进非常有用。

类C语言的语言可以得到else if是免费的而不必实现它的话。

原因在于,语法控制结构简单地在下一个语句上操作,如果需要(例如{ x += 1; y += 1 } ),它可以是括在大括号中的复合语句。

这意味着,一旦你实现了ifelseelse if就是自然而然地脱离了语言的语法,而不需要进一步的实现。 看看为什么,看看这个:

 if (condition) { if_body(); } else if (another_condition) { else_if_body(); } else { else_body(); } 

这看起来像一个ifelse附加, else if和一个附加,每个应用于一个复合语句。 但事实上并非如此。 这实际上是两个单独的if语句,每个语句都与另一个case完全else ; 第二个if语句在第一个if语句的else中。

else if { ... }被真正parsing为else语句, if语句就是一个if语句(应用于复合语句{ else_if_body(); } ;然后最后的else绑定到前面的if ,这是第二个。

下面是按照如何parsing1

 if (condition) { if_body(); } else { if (another_condition) { else_if_body(); } else { else_body(); } } 

但是事实certificate,如果语言直接实现else if作为if语句的第一类选项,它将performance得与第一个else语句中的第二个独立if语句完全相同 ! 所以没有必要打扰执行else if有的话; 语言实现者在使用这种风格的语法的时候可以得到else if ,一旦他们实现了ifelse

Python的语法不允许这个免费赠品。

C语言的语法程序员可以用else if的方式来思考 ,即使这个语言只有在else才有,或者仅仅是因为他们可以像我的第一个例子那样编写代码,而且格式化的方式看起来不一样而不是编译器。

Python,OTOH,使用缩进来表示块结构,这迫使块结构看起来与读者相同,就像它对解释器2一样 。 一旦你得到了ifelse的Python风格的语法,程序员仍然可以编写与else相同的代码if通过在第一个else语句中放置第二个if语句。 但是,这样看起来像这样:

 if condition: if_body() else: if another_condition: else_if_body() else: else_body() 

这看起来很丑陋,而且一旦你得到1个或2个以上的if,就比其他if-if链更加复杂。 所以值得添加一个明确的语言特性来取回用else-if来思考的能力。 尽pipe在技术上使语言更加复杂,但实际上它使得语言的思维更加简单,所以它的复杂性很高。 用一个手工构build的嵌套链ifelse的阅读器必须手动读取所有的代码,并validation除了最后一个除了最后一个包含一个if语句,没有别的,为了得出结论,整个序列相当于一个按顺序检查线性条件链,并执行一些代码以执行第一个检查成功。

那么。 我们已经看到,类C语言的语言else if能够与else if语言一起使用的else if ,也可以免费获得。 这就是为什么存在的原因。 Python类语法的语言必须明确地做一些事情来得到一个可以用作else-if的结构。 他们为什么selectelif ? 这是任意的; 你必须真正问问做决定的人。

然而,Python并没有发明elif ,早在Python出现之前,它就已经在其他语言中出现了。 所以我猜想 ,当他们必须实现一个明确的else-if构造时,他们只需select一个程序员已经熟悉的构造。


1从技术上讲,这就是人们总是认真地总是使用支配结构的支架来编写代码的方式。 ;)

2你当然可以为此构造反例,但这是基于缩进的语法的一般概念。

为了避免支持^ H ^ H ^ H ^ H ^ Helse如果战争。

在C / C ++中,如果你还有else if ,你可以用很多不同的风格来构造你的代码:

 if (...) { ... } else if (...) { ... } if (...) { ... } else if (...) { ... } if (...) { ... } else if (...) { ... } // and so on 

相反,如果有一个elif ,那么这样的战争永远不会发生,因为只有一种写elif 。 而且, elifelse if要短得多。

就是那样子。 Javascript使用else if , php使用elseif , perl使用elsif ,C预处理器和python使用elif 。 没有一个是错的,他们只是select稍微不同的语法来做同样的事情。 :d

我发现它们有助于区分“其他”和“其他”。

elif是其他语言的开关替代品,但功率更大

例如在你写的C中

开关(数字){
 情况1:
    DOA()
   打破;
 情况2:
    DOB()
   打破;
 情况N:
    DON()
   打破;
 默认:
    doSomethingElse()
   打破;
 }

在Python中你写

如果数字== 1:doA()
 elif number == 2:doB()
 elif number == N:doC()
 else:doSomethingElse()

正如你所看到的, eliffunction更强大,因为你可以把更复杂的语句放在switch中,另外避免嵌套if/else语句

Python从Perl中inheritance了这个名字,叫做elsif

在Python的情况下, else if像C这样的两种独立的结构类似的语言将是相当丑陋的,因为你必须有else: if:有两个缩进级别。

将这两个关键字组合在一起会更好是非常有争议的(所以else if只有一个结构,就像not in运算符一样。

PL / SQL也有elsif ,而C预处理器有拼写elif