|
else, 我們?cè)偈煜げ贿^(guò)了。對(duì)于一個(gè)python程序員來(lái)說(shuō),else往往都是配合if來(lái)使用的,像這樣:
但是,python中的else并不只能用在if之后,so,這次我們討論一下Python流程控制中的else。 else子句不僅能在if 語(yǔ)句中使用,還能在 for、while 和 try 語(yǔ)句中使用,這個(gè)語(yǔ)言特性不是什么秘密,但卻沒(méi)有得到重視。我們看一個(gè)例子:
本例當(dāng)中,循環(huán)最后找到了'banana',輸出'Founded!',并且跳出循環(huán),所以else字句并沒(méi)有被執(zhí)行。但如果,將代碼修改一下,去掉列表中的'banana':
運(yùn)行代碼就會(huì)直接拋出錯(cuò)誤!如果不使用else字句來(lái)完成上述功能,可能我們就需要設(shè)置控制標(biāo)志了,像這樣:
很明顯,這里使用了額外的變量flag和if語(yǔ)句。 while 和 for相類似,簡(jiǎn)單舉個(gè)例子:
下面看一下try:
很明確,try 塊防守的是 dangerouscall() 可能出現(xiàn)的錯(cuò)誤,而且很明顯,只有 try 塊不拋出異常,才會(huì)執(zhí)行aftercall()。 現(xiàn)在,總結(jié)一下else 子句的行為如下: for: 僅當(dāng) for 循環(huán)運(yùn)行完畢時(shí)(即 for 循環(huán)沒(méi)有被 break 語(yǔ)句中止)才運(yùn)行 else 塊。 while: 僅當(dāng) while 循環(huán)因?yàn)闂l件為假值而退出時(shí)(即 while 循環(huán)沒(méi)有被break 語(yǔ)句中止)才運(yùn)行 else 塊。 try: 僅當(dāng) try 塊中沒(méi)有異常拋出時(shí)才運(yùn)行 else 塊。 即,如果異?;蛘?return、break 或 continue 語(yǔ)句導(dǎo)致控制權(quán)跳到了復(fù)合語(yǔ)句的主塊之外,那么else 子句也會(huì)被跳過(guò)。 for/else、while/else 和 try/else 的語(yǔ)義關(guān)系緊密,不過(guò)與if/else 差別很大。主要是else 這個(gè)單詞的意思阻礙了我們對(duì)這些特性的理解。 按正常的理解應(yīng)該是“要么運(yùn)行這個(gè)循環(huán),要么做那件事”。可是,在循環(huán)中,else 的語(yǔ)義恰好相反:“運(yùn)行這個(gè)循環(huán),然后做那件事。”不過(guò),相信多使用幾次,你會(huì)熟悉的。 |
|
|
來(lái)自: LibraryPKU > 《Python》