大多數(shù)編程語言都提供了 if...else... 語句,即表示如果滿足條件就做這件事,否則就做另外一件事。同時,在 Python 中 else 除了可以與 if 搭配使用,還有其他特別的語法: for…else …、while…else …、try…except...else 。
我們先來看一段代碼,如下:
上面的代碼中,打印結(jié)果會是什么呢?我們執(zhí)行一下,打印信息如下:
我們可以發(fā)現(xiàn),如果循環(huán)塊中代碼正常執(zhí)行,則執(zhí)行else代碼塊,如果前面的循環(huán)未執(zhí)行完,則不執(zhí)行else代碼塊。這與 if… else… 剛好相反,在 if… else… 語句中如果if代碼塊沒有執(zhí)行,則執(zhí)行else代碼塊。
我們看一下官方文檔中是如何解釋的:
A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there is no next item.
當(dāng)用 break 關(guān)鍵字終止當(dāng)前循環(huán)時,則不會執(zhí)行 else 語句。而使用 continue 關(guān)鍵字快速進(jìn)入下一輪循環(huán),或者沒有使用其他關(guān)鍵字,循環(huán)的正常結(jié)束后,就會執(zhí)行 else 語句。
同樣,我們再看一下 while…else … 語句,如下:
我們執(zhí)行上面代碼,打印信息如下:
我們可以發(fā)現(xiàn)這與 for... else... 語法相同,如果循環(huán)塊中代碼正常執(zhí)行,則執(zhí)行else代碼塊,如果前面的循環(huán)未執(zhí)行完,則不執(zhí)行else代碼塊。
那么這種用法有哪些場景會使用到呢?
答:似乎除了下面這種場景,幾乎沒有其他場景會用到該語法。
當(dāng)我們使用 for 循環(huán)遍歷列表查找某個元素(或者是更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu))時,如果找到了就立刻退出循環(huán),如果遍歷完所有元素還沒找到,則需要以另外一種形式(如,異常)的方式告知,此時,用 for... else... 會非常的優(yōu)雅,如下:
如果不使用 for... else... , 那么還需特意創(chuàng)建一個標(biāo)志位來標(biāo)記是否已經(jīng)找到,如下:
最后,需要注意因為這種語法在實際應(yīng)用中比較稀有,也容易與 if... else... 混淆,建議用到此語法時,添加注釋說明,避免引起其他誤操作。






