2016-09-21 29 views
0

我没有编程背景,所以这可能真的很愚蠢,但我从来没有考虑过这个:看起来else声明基本上是多余的,因为当条件为False时,Python只是移动到下一个未缩进的行。其他基本上是多余的

例如,通常你会写:(如果不使用elif

x=2 
if x == 1: 
    value = "one" 
else: 
    if x == 2: 
     value = "two" 
print value 

但这个工程太:

x=2 
if x == 1: 
    value = "one" 
if x == 2: 
    value = "two" 
print value 

可能有人给这显示了一个例子如何以及何时else:声明是必不可少的?

+0

如果没有'else',然后解释必须检查是否'X == 2'做,即使它已经跑了'x == 1'分支。行为可能是一样的,但是你让解释者做更多的工作。 (它可能不会相同 - 如果有另一个线程,或者如果'value'是一个setter的属性,当'one'被赋值时改变'x',那么它实际上会需要*来做那工作)。 –

回答

2

如果条件相互排斥,那么else是多余的。不过,情况并不重叠。

x = 2 
if x > 0: 
    print 'foo' 
else:     # better -- elif x > 1: 
    if x > 1: 
     print 'bar' 

该程序打印foo

x = 2 
if x > 0: 
    print 'foo' 
if x > 1: 
    print 'bar' 

这个程序打印foobar

+0

它从来不是一个必须的伴侣。你可以使用'if 1> = x> 0:'和'如果x> 1:' – Bharel

+0

不是多余的意味着它是必要的AFAIK。 – Bharel

0

其他从来不是必须的,而是一种方便。这里有一些:

if x == 1: 
    value = "one" 
else: 
    value = "not_one" 

if x < 1: 
    value = "less_than_one" 
elif x < 2: 
    value = "between_one_and_two" 
else: 
    value = "more_than_two" 

它们都可以被改写为:

if x == 1: 
    value = "one" 
if x != 1: 
    value = "not_one" 

if x < 1: 
    value = "less_than_one" 
if 1 <= x < 2: 
    value = "between_one_and_two" 
if 2 <= x: 
    value = "more_than_two" 
+0

在第一个例子中,其他的并不是必须的。 – oaklander114

+0

其他从来不是必须的。这只是方便。 – Bharel

0

如果您正在查找特定案例(使用if),然后使用if(使用else)未涵盖的其他所有内容,则else子句很有用。

通常一个conditional expression使用:

>>> x=3 
>>> value='one' if x==1 else 'not one' 
>>> value 
'not one' 

如果你没有使用else这里(无论是作为一部分有条件或作为if/else的一部分,那么value不会去定义:

>>> del value # remove the name `value` 
>>> x 
3 
>>> if x==1: value='one' 
... 
>>> value 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'value' is not defined 

因此,您确实需要else课程才能确保value在x不是1时收到作业。


顺便说一句,在Python,而不是if/elif/elif/else长级联可以使用字典,默认:

>>> conditions={1:'one', 2:'two', 3:'three'} 
>>> conditions.get(2,'not one, two, or three...') 
'two' 
>>> conditions.get(19,'not one, two, or three...') 
'not one, two, or three...' 
1

else记得的条件是False。例如,考虑这样的代码:

if x == 1: 
    x = 2 
    print("bar") 
else: 
    if x == 2: 
     print("foo") 

随着else,只有“栏中的”或“富”的一个将被打印。

没有else,既“栏中的”和“富”可被印刷由于x值可以改变。

这也可以用“重叠”条件帮助:

if x > 10: 
    print("big") 
elif x > 5: 
    print("medium") 
elif x > 1: 
    print("sizable") 
else: 
    print("small")