91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python for和else語句趣談

發布時間:2020-09-04 19:31:00 來源:腳本之家 閱讀:109 作者:FOOFISH-PYTHON之禪 欄目:開發技術

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

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

任何編程語言都提供了 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

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

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

另外,即使 for 循環遍歷的是一個空列表也會執行 else 語句塊。

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

繼續探索,如果我們用 break 提前終止 for 循環,會發生什么?

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

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

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

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

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

當你用 for 循環迭代查找列表的中的某個元素時,如果找到了就立刻退出循環,如果迭代完了列表還沒找到需要以另外一種形式(比如異常)的方式通知調用者時,用 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... , 那么還需要專門建立一個臨時標記變量來標記是否已經找到了

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿巴嘎旗| 安仁县| 雅江县| 惠东县| 水富县| 康马县| 漯河市| 北宁市| 和硕县| 阳东县| 永新县| 永和县| 贵定县| 樟树市| 隆子县| 舒兰市| 麻江县| 乡宁县| 咸宁市| 乐都县| 青州市| 道孚县| 永清县| 临安市| 德庆县| 西乡县| 沙雅县| 丰镇市| 宝山区| 宣城市| 遂平县| 日照市| 常德市| 福建省| 双鸭山市| 晋州市| 府谷县| 泸溪县| 义乌市| 灵寿县| 娄底市|