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 }
),它可以是括在大括号中的复合语句。
这意味着,一旦你实现了if
和else
, else if
就是自然而然地脱离了语言的语法,而不需要进一步的实现。 看看为什么,看看这个:
if (condition) { if_body(); } else if (another_condition) { else_if_body(); } else { else_body(); }
这看起来像一个if
与else
附加, 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
,一旦他们实现了if
和else
。
Python的语法不允许这个免费赠品。
C语言的语法程序员可以用else if
的方式来思考 ,即使这个语言只有在else
才有,或者仅仅是因为他们可以像我的第一个例子那样编写代码,而且格式化的方式看起来不一样而不是编译器。
Python,OTOH,使用缩进来表示块结构,这迫使块结构看起来与读者相同,就像它对解释器2一样 。 一旦你得到了if
和else
的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的嵌套链if
在else
的阅读器必须手动读取所有的代码,并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
。 而且, elif
比else 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()
正如你所看到的, elif
function更强大,因为你可以把更复杂的语句放在switch中,另外避免嵌套if/else
语句
Python从Perl中inheritance了这个名字,叫做elsif
。
在Python的情况下, else if
像C这样的两种独立的结构类似的语言将是相当丑陋的,因为你必须有else: if:
有两个缩进级别。
将这两个关键字组合在一起会更好是非常有争议的(所以else if
只有一个结构,就像not in
运算符一样。
PL / SQL也有elsif
,而C预处理器有拼写elif
。