成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

耐人尋味的 for...else...語句

開發 開發工具
任何編程語言都提供了 if…else… 語句,表示如果(if)滿足條件就做某件事,否則(else)就做另外一件事,然而,在 Python 中 else 不僅可以和 if 搭配使用,另一種特有的句法是 for…else …。

[[198572]]

老婆給當程序員的老公打電話:“下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個。”當晚,程序員老公手捧一個包子進了家門……老婆怒道:“你怎么就買了一個包子?”老公答曰:“因為看到了賣西瓜的。”

程序員買西瓜的笑話可能大部分讀者都知道,今天寫的這篇文章和這個笑話有一定的關系。

任何編程語言都提供了 if…else… 語句,表示如果(if)滿足條件就做某件事,否則(else)就做另外一件事:

  1. if a==b: 
  2.     print("true") 
  3.  
  4. else: 
  5.     print("false") 

然而,在 Python 中 else 不僅可以和 if 搭配使用,另一種特有的句法是 for…else …,它還可以和 while、try…except 組合使用,例如:

  1. for i in range(3): 
  2.     print(i) 
  3. else: 
  4.     print("end") 
  5.  
  6. >>> 
  7. end 

但是,你會發現 for…else… 與 if…else… 表現得不一樣,按照以往經驗來說,執行了 for 語句塊的代碼就不執行 else 里面了,反之亦然。

然而,我們看到的卻恰恰相反,for 循環結束之后接著又執行了 else 語句塊,這就有點意思了,if … else … 翻譯成大白話就是 如果…否則…,而 for…else… 翻譯成白話成了 直到… 然后 …,為什么不把它寫成 for…then… 的句式呢?

for 循環遍歷空列表也會執行 else 語句塊,因為它是正常退出 for 循環的一種特例情況。

  1. for i in []: 
  2.     print(i) 
  3. else: 
  4.     print("end") 
  5.  
  6. >>> 

繼續探索,我們用 break 提前終止 for 循環

  1. for i in range(3): 
  2.     print(i) 
  3.     if i % 2 == 0: 
  4.         break 
  5. else: 
  6.     print("end") 
  7.  
  8. >>> 

循環遇到 break 退出后,整個語句就結束,else 語句塊也不執行了。

綜上,我們可以得出這樣一個結論,只有當循環里沒有遇到 break 時,else 塊才會執行。

Python 之父為什么要搞出這樣的一種語法糖出來呢?這是我們常人沒法理解的。不過「python之禪」告訴了我們答案: “Although that way may not be obvious at first unless you’re Dutch.”。

帶著這個問題,我也在 StackOver Flow 找了一下答案,在平時的開發中真的很少有 for…else… 的應用場景,不過,像下面這種場景用 for else 還真是一種 pythonic 的用法。

當你用 for 循環迭代查找列表的中的某個元素時,如果找到了就提前退出,如果迭代完了還沒找到需要以另外一種形式通知調用者時,用 for else 無疑是***的選擇。

  1. for i in mylist: 
  2.     if i == target: 
  3.         break 
  4.     process(i) 
  5. else: 
  6.     raise ValueError("List argument missing terminal flag.") 

如果不用 for…else… , 那么還需要專門建立一個臨時標記變量來標記是否已經找到了

  1. found = False 
  2. for i in mylist: 
  3.     if i == target: 
  4.         found = True 
  5.         break 
  6.     process(i) 
  7.  
  8. if not found: 
  9.     raise ValueError("List argument missing terminal flag.") 

當你想在房間里找某樣東西時,只要在任意位置找到了,就停止繼續搜查工作。但如果把整個房間都翻遍了,還沒找到我們想要的東西,需要告訴人家說:這兒沒有你要找的東西。遇到這樣的情況用 for … else ,除此之外,***不要用它。

【本文是51CTO專欄作者“劉志軍”的原創文章,作者微信公眾號:Python之禪(VTtalk)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2021-07-15 13:11:46

物聯網平臺物聯網IOT

2011-05-23 16:23:18

Pythonelse

2021-02-25 09:35:32

語句elsePython

2023-03-30 13:47:11

AI

2025-02-05 07:45:59

2019-04-08 14:30:34

2020-08-21 13:20:36

C++If ElseLinux

2013-07-01 14:45:10

iOS7越獄

2020-11-23 09:37:22

Python開發函數

2023-08-11 15:46:40

BashIf Else 語句

2025-02-18 13:44:53

DeepSeek人工智能OpenAI

2013-11-27 09:38:31

云計算虛擬化

2024-06-18 18:36:03

2024-11-25 09:10:00

2022-12-09 07:58:52

Bash條件語句

2022-04-12 07:32:40

引擎模式Spring策略模式

2023-11-23 23:57:05

2016-10-11 20:33:17

JavaScriptThisWeb

2012-04-13 10:11:22

Java

2013-11-27 09:16:28

編程結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品国产三级国产aⅴ原创 | 久久久久久毛片免费观看 | 99久久国产综合精品麻豆 | 国产激情第一页 | 久久在视频 | 国产免费一区二区 | 国产伦精品一区二区三区在线 | 国产精品久久久久久久久久久免费看 | 99pao成人国产永久免费视频 | 午夜电影网 | 成人欧美一区二区三区白人 | 亚洲高清在线 | 欧美一区二区 | 18gay男同69亚洲网站 | 亚洲精品日韩在线 | 日本精品视频在线 | 精品欧美一区二区三区 | 成人免费视频观看 | 九九免费视频 | 国产精品国产精品国产专区不片 | 99精品免费久久久久久久久日本 | 亚洲第一天堂无码专区 | 影音先锋男 | 亚洲成人免费视频在线 | 91免费看片 | 久久免费精品视频 | 欧美日韩在线一区 | 日本电影韩国电影免费观看 | 亚洲精品99久久久久久 | 国产伦精品一区二区三区精品视频 | 黄色片av | 人人做人人澡人人爽欧美 | 久草精品视频 | 久久久久久亚洲国产精品 | 国产精品国产a | 亚洲欧美日韩精品久久亚洲区 | 久久久黑人 | 亚洲免费一区二区 | 日韩在线欧美 | 亚洲a毛片 | 福利二区 |