2016-02-04 49 views
0

我正在通過this。來自C環境,它以驚人的和難以置信的方式直面我。而且,當時我嘗試了我自己::「別」與「同時」和神祕的「休息」

bCondition = True 
while bCondition: 
    print("Inside while\n") 
    bCondition = False 
else: 
    print("Inside else\n") 
print("done\n") 

此代碼將呈現以下輸出,

#Output 
Inside while 
Inside else 
done 

Ideone link

現在,我的問題是,爲什麼呢?我們爲什麼需要這個?爲什麼兩個塊都被執行?是不是ifelse是互相製造的,那麼什麼樣的用例會使這個設計成爲一個有用的設計來實現呢?

同樣,如果我們只是更改代碼以合併break,則行爲更加神祕。 Ideone Link

bCondition = True 
while bCondition: 
    break 
else: 
    print("Inside else\n") 
print("done\n") 

此代碼將呈現以下輸出,

#Output 
done 

爲什麼兩個區塊被跳過?是不是break只是爲了突破循環,那麼爲什麼它會突破else區塊?

我也經歷了documentation,雖然不能清除我的疑惑。

+2

_在第一個套件中執行的break語句終止循環,而不執行else子句的套件._ - 這句話中的含義不清楚?我同意這很奇怪,但它是規範的一部分。你不會被迫使用這種形式。 –

+2

看看這個http://stackoverflow.com/questions/3295938/else-clause-on-python-while-statement –

+0

不要在'while'中使用'else'。 – dsgdfg

回答

4

使用其他子句在python循環之後是檢查某個對象是否滿足某些給定的條件。

如果要實現搜索循環,那麼else子句是在如果因爲假設的循環不會突然終止使用結構,如突破循環結束時執行,如果突破使用的搜索條件遇到了。

因此,當您使用中斷時,其他子句不計算。但是,如果在條件的計算結果爲false之後自然退出循環,則會評估else子句,因爲在這種情況下,假定沒有任何對象符合您的搜索條件。

for x in data: 
    if meets_condition(x): 
     print "found %s" % x 
     break 
else: 
    print "not found" 
    # raise error or do additional processing 
+0

很好的解釋....我最初在python下for''else'語法下有問題 – danidee