2016-09-21 11 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")