欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python for和else語(yǔ)句趣談

 更新時(shí)間:2019年07月02日 11:17:56   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了python for和else語(yǔ)句趣談,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

老婆給當(dāng)程序員的老公打電話:“下班順路買一斤包子帶回來(lái),如果看到賣西瓜的,買一個(gè)?!碑?dāng)晚,程序員老公手捧一個(gè)包子進(jìn)了家門……老婆怒道:“你怎么就買了一個(gè)包子?”老公答曰:“因?yàn)榭吹搅速u西瓜的?!?/p>

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

任何編程語(yǔ)言都提供了 if...else... 語(yǔ)句,表示如果(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

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

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

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

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

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

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

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

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

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

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

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

# 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... , 那么還需要專門建立一個(gè)臨時(shí)標(biāo)記變量來(lái)標(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)|西時(shí),只要在任意位置找到了,就停止繼續(xù)搜查工作。但如果把整個(gè)房間都翻遍了,還沒(méi)找到我們想要的東西時(shí),需要告訴人家,很抱歉,這兒沒(méi)有你要找的東西。遇到這樣的情況時(shí)就用 for ... else ,除此之外,恐怕只會(huì)引起誤操作。

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

相關(guān)文章

  • Python基于pygame模塊播放MP3的方法示例

    Python基于pygame模塊播放MP3的方法示例

    這篇文章主要介紹了Python基于pygame模塊播放MP3的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Python使用pygame模塊播放MP3音頻文件的實(shí)現(xiàn)方法以及相關(guān)函數(shù)的功能說(shuō)明,需要的朋友可以參考下
    2017-09-09
  • Python?文件操作方法總結(jié)

    Python?文件操作方法總結(jié)

    這篇文章主要介紹了Python?文件操作方法總結(jié),文章基于python的基礎(chǔ)展開(kāi)Python?文件操作方法,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • python實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn)

    python實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)密碼強(qiáng)度校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 淺談Python數(shù)據(jù)類型判斷及列表腳本操作

    淺談Python數(shù)據(jù)類型判斷及列表腳本操作

    下面小編就為大家?guī)?lái)一篇淺談Python數(shù)據(jù)類型判斷及列表腳本操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • python 基于opencv實(shí)現(xiàn)圖像增強(qiáng)

    python 基于opencv實(shí)現(xiàn)圖像增強(qiáng)

    這篇文章主要介紹了python 基于opencv實(shí)現(xiàn)圖像增強(qiáng)的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 四步教你學(xué)會(huì)打包一個(gè)新的Python模塊

    四步教你學(xué)會(huì)打包一個(gè)新的Python模塊

    當(dāng)你安裝應(yīng)用程序時(shí),通常是安裝一個(gè)軟件包,其中包含應(yīng)用程序的可執(zhí)行代碼和重要文件。在?Linux上,軟件一般被打包成RPM或DEB等格式,然而幾乎每天都有新的Python模塊發(fā)布,因此你很容易遇到一個(gè)尚未打包的Python模塊。本文教你四步打包一個(gè)新的Python模塊
    2022-09-09
  • Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容

    Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容

    這篇文章主要給大家介紹了關(guān)于Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式

    Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式

    今天小編就為大家分享一篇Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python?第三方庫(kù)?Pandas?數(shù)據(jù)分析教程

    Python?第三方庫(kù)?Pandas?數(shù)據(jù)分析教程

    這篇文章主要介紹了Python?第三方庫(kù)?Pandas?數(shù)據(jù)分析教程的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 解決使用Spyder IDE時(shí)matplotlib繪圖的顯示問(wèn)題

    解決使用Spyder IDE時(shí)matplotlib繪圖的顯示問(wèn)題

    這篇文章主要介紹了解決使用Spyder IDE時(shí)matplotlib繪圖的顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論