亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python for和else語句趣談

系統(tǒng) 1525 0

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

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

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

            
if a==b:
print("true")
else:
print("false")
          

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

            
for i in range(3):
print(i)
else:
print("end")
>>>
0
1
2
end
          

但是,你會發(fā)現(xiàn) for…else… 與 if…else… 表現(xiàn)得不一樣,按照以往經(jīng)驗來說,執(zhí)行了 for 語句塊中的代碼就不執(zhí)行 else 里面的,反之亦然。

然而,我們看到的卻恰恰相反,for 循環(huán)結(jié)束之后接著又執(zhí)行了 else 語句塊,這就有點意思了,if … else … 翻譯成白話就是 如果…否則…,而 for…else… 翻譯成白話成了 直到… 然后 …,為什么不把它寫成 for…then… 的句式呢?這不更好理解嗎?

另外,即使 for 循環(huán)遍歷的是一個空列表也會執(zhí)行 else 語句塊。

            
for i in []:
print(i)
else:
print("end")
>>>
end
          

繼續(xù)探索,如果我們用 break 提前終止 for 循環(huán),會發(fā)生什么?

            
for i in range(3):
print(i)
if i % 2 == 0:
break
else:
print("end")
>>>
0
          

循環(huán)遇到 break 退出后,整個語句就結(jié)束,else 語句塊也不執(zhí)行了。

綜上,我們可以得出這樣一個結(jié)論,只有當循環(huán)里沒有遇到 break 時,else 塊才會執(zhí)行。此刻,你應(yīng)該明白了,真正和 else 搭配使用的是 for 循環(huán)中的 break,break ... else ... 才是兩個互斥的條件

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

在平時的開發(fā)中真的很少有 for...else... 的應(yīng)用場景,不過,像下面這種場景用 for else 還真是一種 pythonic 的用法。

當你用 for 循環(huán)迭代查找列表的中的某個元素時,如果找到了就立刻退出循環(huán),如果迭代完了列表還沒找到需要以另外一種形式(比如異常)的方式通知調(diào)用者時,用 for...else... 無疑是最好的選擇。

            
# https://stackoverflow.com/a/9980752/1392860
for i in mylist:
if i == target:
break
process(i)
else:
raise ValueError("List argument missing terminal flag.")
          

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

            
found = False
for i in mylist:
if i == target:
found = True
break
process(i)
if not found:
raise ValueError("List argument missing terminal flag.")
          

當你想在房間里找某樣?xùn)|西時,只要在任意位置找到了,就停止繼續(xù)搜查工作。但如果把整個房間都翻遍了,還沒找到我們想要的東西時,需要告訴人家,很抱歉,這兒沒有你要找的東西。遇到這樣的情況時就用 for ... else ,除此之外,恐怕只會引起誤操作。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级在线免费观看 | 国产成人精品免费视频大全五级 | 美女18隐私羞羞视频网站 | 九天玄帝诀王凡小说免费阅读 | 色播五月婷婷 | 欧美日韩亚洲精品国产色 | 国产精品久久久久久久免费大片 | 日韩精品成人 | 香蕉依人| 国产高清精品一区 | 中文字幕一区久久久久 | 国产成人精品亚洲2020 | 欧美日韩成人在线 | 伊人中文字幕在线观看 | 天天综合网天天综合色不卡 | 久久久久久国产精品免费免 | 久久99精品国产99久久6男男 | 九九热精品视频在线观看 | 深夜免费看 | 97午夜影院| 久久黄色录像 | 国产a不卡片精品免费观看 国产a高清 | 免费亚洲视频 | 91福利社 | 亚洲精品一区二区 | jizz中国女人 | 添bbb免费观看高清视频 | 国产亚洲精品美女2020久久 | 日本一级α一片免费视频 | 亚州久久 | 中文线码中文高清播放中 | 深夜视频免费看 | 亚洲免费播放 | 国产精品白丝喷水在线观看 | 国产一级特黄aa毛片 | 青青青草视频在线观看 | 免费一级毛片在线播放视频 | 九九视频在线观看视频 | 亚洲精品久久久久久动漫剧情 | 深夜免费在线观看 | 久久久久免费观看 |