我刚刚开始编程Python,我想知道elif关键字.
我在使用之前使用过的其他编程语言else if.有没有人知道为什么Python开发人员添加了额外的elif关键字?
为什么不:
if a:
print("a")
else if b:
print("b")
else:
print("c")
Run Code Online (Sandbox Code Playgroud)
Ada*_*ear 117
据我所知,这是为了避免过度缩进.你可以写
if x < 0:
print 'Negative'
else:
if x == 0:
print 'Zero'
else:
print 'Positive'
Run Code Online (Sandbox Code Playgroud)
但
if x < 0:
print 'Negative'
elif x == 0:
print 'Zero'
else:
print 'Positive'
Run Code Online (Sandbox Code Playgroud)
真是太好了.
关键字
elif是'else if'的缩写,有助于避免过度缩进.
Ben*_*Ben 67
具有类似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();
}
Run Code Online (Sandbox Code Playgroud)
这看起来像if带有else if和else附加,每个都应用于复合语句.但事实上并非如此.这实际上是两个单独的if陈述,每个陈述只有一个else案例; 第二个if陈述else在第一个if陈述的主体内.
else if { ... }实际上解析为else应用于下一个语句,这是一个if语句(应用于复合语句{ else_if_body(); }.然后最后else绑定到前一个if,这是第二个.
这里写的更符合它的解析方式1:
if (condition) {
if_body();
} else {
if (another_condition) {
else_if_body();
} else {
else_body();
}
}
Run Code Online (Sandbox Code Playgroud)
但事实证明,如果语言直接实现else if为if语句的第一类选项,它的行为与第一个语句中的第二个独立语句完全相同!所以根本不需要打扰实施; 语言实现者在实现和实现后,可以使用这种语法免费获得.ifelseelse ifelse ififelse
Python的语法不允许这个免费赠品.
C风格的语法的程序员可以想到来讲else if,即使语言只if用准确的零或一else,但只是因为他们可以编写代码就像是在看不同的人的读者比格式化的方式,我的第一个例子它对编译器有用.
Python,OTOH,使用缩进来指示块结构,这迫使块结构对于人类阅读器看起来与对解释器2看起来相同.一旦你得到了if和else在Python风格的语法,程序员仍然可以编写代码的行为等同于其他假设,通过把第二个if语句中的else一首.但这看起来像这样:
if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
Run Code Online (Sandbox Code Playgroud)
这看起来很丑陋,一旦你获得超过1或2个其他ifs,就比else-if链更复杂.所以值得添加一个明确的语言功能,以恢复使用else-if进行思考的能力.虽然它在技术上使语言变得更加复杂,但它实际上使得语言思维更简单,因此它具有很好的复杂性; 在手动构造的嵌套ifs 链中else,读者必须手动读取所有代码并验证else除了最后一个之外的每个代码都只包含一个if语句而不是其他任何内容,以便得出结论整个序列等同于一个线性条件链检查顺序,一些代码执行第一次检查成功.
那么.我们已经看到具有类似C语法的语言也可以使用else if,因为它们是免费获得的.这就是为什么存在的原因.具有类似Python语法的语言必须明确地做一些事情来获得可以用作else-if的构造.他们为什么选择elif?这是任意的; 你必须实际问问做出决定的人.
然而,Python没有发明elif,在Python存在之前很久就存在于其他语言中.所以我猜想当他们必须实现一个显式的else-if结构时,他们只选择一个程序员已经熟悉的结构.
1从技术上讲,这就是那些真正认真对待总是使用带控制结构的大括号的人应该如何编写代码.;)
2你当然可以构造反例,但这是基于缩进语法的一般概念.
Lie*_*yan 16
为了避免支撑^ H ^ H ^ H ^ H ^ Helse如果战争.
在C/C++中else if,您可以使用多种不同的样式构建代码:
if (...) {
...
} else if (...) {
...
}
if (...) {
...
}
else if (...) {
...
}
if (...) {
...
} else
if (...) {
...
}
// and so on
Run Code Online (Sandbox Code Playgroud)
由具有elif相反,这样的战争将永远不会发生,因为只有写的一个途径elif.而且,elif比短得多else if.
就是那样子.Javascript使用else if,php使用elseif,perl使用elsif,C预处理器和python使用elif.它们都没有错,它们只是选择稍微不同的语法来做同样的事情.:d
Dan*_*ite -3
最有可能的是语法糖。就像WendVisual Basic 的一样。
| 归档时间: |
|
| 查看次数: |
34839 次 |
| 最近记录: |