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