python for和else語句趣談
老婆給當(dāng)程序員的老公打電話:“下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個?!碑?dāng)晚,程序員老公手捧一個包子進(jìn)了家門……老婆怒道:“你怎么就買了一個包子?”老公答曰:“因?yàn)榭吹搅速u西瓜的?!?/p>
程序員買西瓜的笑話可能大部分讀者都知道,今天寫的這篇文章和這個笑話有一定的關(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)驗(yàn)來說,執(zhí)行了 for 語句塊中的代碼就不執(zhí)行 else 里面的,反之亦然。
然而,我們看到的卻恰恰相反,for 循環(huán)結(jié)束之后接著又執(zhí)行了 else 語句塊,這就有點(diǎn)意思了,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é)論,只有當(dāng)循環(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 的用法。
當(dāng)你用 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... , 那么還需要專門建立一個臨時標(biāo)記變量來標(biāo)記是否已經(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.")
當(dāng)你想在房間里找某樣?xùn)|西時,只要在任意位置找到了,就停止繼續(xù)搜查工作。但如果把整個房間都翻遍了,還沒找到我們想要的東西時,需要告訴人家,很抱歉,這兒沒有你要找的東西。遇到這樣的情況時就用 for ... else ,除此之外,恐怕只會引起誤操作。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python try except else使用詳解
- 淺談對python中if、elif、else的誤解
- python else語句在循環(huán)中的運(yùn)用詳解
- python中if及if-else如何使用
- python使用for...else跳出雙層嵌套循環(huán)的方法實(shí)例
- Python while循環(huán)使用else語句代碼實(shí)例
- 在python中利用try..except來代替if..else的用法
- Python循環(huán)中else,break和continue的用法實(shí)例詳解
- Python列表解析配合if else的方法
- 詳解Python if-elif-else知識點(diǎn)
- Python中else的三種使用場景
相關(guān)文章
關(guān)于PyTorch環(huán)境配置及安裝教程(Windows10)
這篇文章主要介紹了關(guān)于PyTorch環(huán)境配置及安裝教程(Windows10),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Python通過wordcloud庫實(shí)現(xiàn)將單詞生成詞云
Python的wordcloud庫是一個用于生成詞云的Python包,它可以將一段文本中出現(xiàn)頻率高的單詞按其出現(xiàn)頻率大小以及顏色深淺排列成一個詞云圖形,從而更好地展示文本中的信息,你可以使用wordcloud庫來生成各種類型的詞云,本文就介紹了如何生成心型詞云2023-06-06
Python結(jié)合ImageMagick實(shí)現(xiàn)多張圖片合并為一個pdf文件的方法
這篇文章主要介紹了Python結(jié)合ImageMagick實(shí)現(xiàn)多張圖片合并為一個pdf文件的方法,結(jié)合實(shí)例形式分析了Python將圖片文件轉(zhuǎn)換為pdf文件的相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
python pandas模塊進(jìn)行數(shù)據(jù)分析
Python的Pandas模塊是一個強(qiáng)大的數(shù)據(jù)處理工具,可以用來讀取、處理和分析各種數(shù)據(jù),本文主要介紹了python pandas模塊進(jìn)行數(shù)據(jù)分析,具有一定的參考價值,感興趣的可以了解一下2024-01-01

