【python小技巧3】else的用法

說到 else,新手可能會(huì)說不就是?if - else 結(jié)構(gòu)嗎?你能想到幾個(gè)用法呢?
目錄
if - else 結(jié)構(gòu)
... if ... else ... 結(jié)構(gòu)(條件表達(dá)式、三目運(yùn)算符、三元運(yùn)算符)
for / while - else? 結(jié)構(gòu)
try - except - else? 結(jié)構(gòu)

一、if - else 結(jié)構(gòu)
這個(gè)沒啥好說的,入門難度。
硬要說啥的話,就是 else 后面的冒號別漏了。
常見的分支結(jié)構(gòu)有:
單分支:if
雙分支:if - else
多分支(無else):if - elif - ...
多分支(有else):if - elif - ... - else

二、... if ... else ... 結(jié)構(gòu)(條件表達(dá)式、三元/目運(yùn)算符)
類似于C語言中的 cond ? a : b
如果僅僅是根據(jù)條件確定值的話,使用
不如
來的簡潔,而且可讀性更高,雖然它倆是完全等價(jià)的。
注意:條件表達(dá)式的運(yùn)算符優(yōu)先級較低,僅次于 lambda 匿名函數(shù)表達(dá)式,所以如果作為表達(dá)式的一部分出現(xiàn)時(shí),應(yīng)考慮要不要加括號
e.g.

三、for / while - else 結(jié)構(gòu)
It is executed when the loop terminates through exhaustion of the iterable (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.
——4.?More Control Flow Tools — Python 3.8.14 documentation
說人話就是循環(huán)自然結(jié)束時(shí)會(huì)執(zhí)行 else 里的代碼,被 break 終止循環(huán)時(shí)不會(huì)執(zhí)行。
以后會(huì)專門講?for?循環(huán)(挖坑*1)

四、try - except - else 結(jié)構(gòu)
最完整的處理異常結(jié)構(gòu)是
else 會(huì)在 try 語句塊內(nèi)沒有遇到異常時(shí)執(zhí)行
現(xiàn)在常見的一些組合包括:
try - except - ...
try - except - ... - finally
try - finally
try - except - ... - else
try - except -?...?- else - finally
也就是說:else 和 finally 是可選的,try 和 except 是必須的,在有 finally 的時(shí)候 except 是可選的,但它們出現(xiàn)的順序必須是 try - except - else - finally
執(zhí)行順序:
先執(zhí)行 try 內(nèi)的代碼
如果遇到了異常,從上往下依次找符合哪個(gè)異常,考慮繼承關(guān)系(比如 TypeError 繼承自 Exception),只會(huì)執(zhí)行一個(gè) except 的代碼
如果沒遇到異常,則執(zhí)行 else 代碼塊
無論如何,都會(huì)執(zhí)行 finally 代碼塊,哪怕前面含有 return, break, continue 等
順帶提一句,永遠(yuǎn)不要寫:
這種代碼,最起碼寫個(gè)
至于為什么,以后有機(jī)會(huì)談(挖坑*2)

總結(jié):
分支語句中的 else 用于處理其余的情況
循環(huán)結(jié)構(gòu)中的 else 會(huì)在循環(huán)沒被 break 的時(shí)候執(zhí)行
try 語句中的 else 會(huì)在沒遇到異常時(shí)執(zhí)行
END

參考資料:
https://docs.python.org/3.8/tutorial/controlflow.html
https://docs.python.org/3.8/reference/compound_stmts.html