Python,为什么是elif关键字?

Python,为什么是elif关键字?,python,keyword,Python,Keyword,我刚开始Python编程,我想知道elif关键字 我以前使用过的其他编程语言else if。有人知道Python开发人员为什么添加了额外的elif关键字吗 为什么不: if a: print("a") else if b: print("b") else: print("c") 很可能是语法上的糖。就像visualbasic的Wend。据我所知,它是用来避免过度缩进的。你可以写 if x < 0: print 'Negative' else: if

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

我以前使用过的其他编程语言
else if
。有人知道Python开发人员为什么添加了额外的
elif
关键字吗

为什么不:

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

很可能是语法上的糖。就像visualbasic的
Wend

据我所知,它是用来避免过度缩进的。你可以写

if x < 0:
    print 'Negative'
else:
    if x == 0:
        print 'Zero'
    else:
        print 'Positive'
如果x<0:
打印“负片”
其他:
如果x==0:
打印“零”
其他:
打印“正片”
但是

如果x<0:
打印“负片”
elif x==0:
打印“零”
其他:
打印“正片”
真是太好了


感谢您的参考:

关键字
elif
是“else-if”的缩写,有助于避免过度缩进


Python从Perl继承了这一点,在Perl中它被称为
elsif

在Python的例子中,
else-if
作为两个独立的结构,就像在类似C的语言中一样,将是非常难看的,因为您必须使用带有两个缩进级别的
else:if:

有争议的是,将两个关键字一起使用特殊大小写是否会更好(因此,如果是单个构造,则使用
else,如
not in
操作符)


PL/SQL还有
elsif
,C预处理器将其拼写为
elif
,以避免在战争中使用大括号^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
短得多,如果
就是这样。使用
else if
,使用
elseif
,使用
elsif
,使用
elsif
,C预处理器和python使用
 elif
。它们都没有错,只是选择了稍微不同的语法来做相同的事情。:D

elif是其他语言中switch的某种替代品,但功能更强

例如,用C编写

switch (number){ case 1: doA() break; case 2: doB() break; case N: doN() break; default: doSomethingElse() break; } if number == 1: doA() elif number == 2: doB() elif number == N: doC() else: doSomethingElse() 开关(编号){ 案例1: doA() 打破 案例2: doB() 打破 案例N: 唐() 打破 违约: doSomethingElse() 打破 } 用Python编写

switch (number){ case 1: doA() break; case 2: doB() break; case N: doN() break; default: doSomethingElse() break; } if number == 1: doA() elif number == 2: doB() elif number == N: doC() else: doSomethingElse() 如果数字==1:doA() elif编号==2:doB() elif编号==N:doC() 其他:doSomethingElse()
正如您所看到的,
elif
功能更强大,因为您可以将比开关中更复杂的语句放入,并且避免嵌套
if/else
语句

我发现它们有助于区分“else-if”和“final-else”

原因是在这种情况下,语法控制结构只对下一条语句进行操作,如果需要,下一条语句可以是大括号中的复合语句(例如,
{x+=1;y+=1}

这意味着,一旦您实现了
if
else
else-if
就自然地脱离了该语言的语法,而无需进一步的实现。要了解原因,请查看以下内容:

if (condition) {
    if_body();
} else if (another_condition) {
    else_if_body();
} else {
    else_body();
}
这看起来像是一个
if
,附加了一个
else if
和一个
else
,分别应用于复合语句。但实际上不是。这实际上是两个独立的
if
语句,每个语句正好有一个
else
大小写;第二个
if
语句位于第一个
if
语句

else如果{…}
真的被解析为应用于下一条语句的
else
,这是一条
if
语句(应用于复合语句
{else\u if_body();}
。然后最后的
else
绑定到前一条
if
,这是第二条语句

下面是与解析方式更一致的内容1:

但事实证明,如果该语言确实直接实现了
else if
作为
if
语句的一级选项,那么它的行为将与第一个
else
语句中的第二个独立
if
语句完全相同!因此根本不需要麻烦实现
else if
语言一旦实现了
if
else
,实现者就可以免费获得这种语法样式的
else if

Python的语法不允许这种免费软件

C风格语法的程序员可以用
else if
来思考,即使该语言只有
if
具有零或一个
else
,但这只是因为他们可以编写类似于我的第一个示例的代码,其格式对于人类读者来说与编译器来说不同

Python,OTOH,使用缩进来表示块结构,这迫使块结构在人类读者看来与在解释器2上看起来一样。一旦你用Python风格的语法得到了
if
else
,程序员仍然可以通过放置第二个
if来编写与else-if行为相同的代码e> 第一个的
else
中的语句。但结果如下所示:

if condition:
    if_body()
else:
    if another_condition:
        else_if_body()
    else:
        else_body()
这看起来很难看,而且一旦你得到超过1或2个else-if,用else-if链来思考就比用else-if链复杂得多。因此,值得添加一个明确的语言功能,以恢复用else-if来思考的能力。尽管它在技术上使语言更加复杂,但实际上它使用语言来思考变得更加困难mpler,因此它的复杂性很好;在
if
s嵌套
else
s的内部有一个手动构造的链,读者必须手动读取所有代码,并验证除最后一个之外的每个
else
都只包含一个
if
语句,而ord中没有其他语句