Python有一個for...else語法,它的寫法如下

創新互聯公司-專業網站定制、快速模板網站建設、高性價比巴彥淖爾網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式巴彥淖爾網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋巴彥淖爾地區。費用合理售后完善,十多年實體公司更值得信賴。
for i in range(0,100):
if i == 3:
break
else:
print("Not found")
該語句表示:若for循環遍歷完畢,則執行else部分的語句。也就是說上述代碼不會有任何輸出,而下述代碼會輸出“Not found”:
for i in range(0,100):
pass
else:
print("Not found")
可以很容易地猜出這種語法通常是為了做如下替換的:
# 正常寫法
found = False
for i in range(0, 100):
if i == 3:
found = True
break
if not found:
print("Not found")
# for...else寫法
for i in range(0, 100):
if i == 3:
break
else:
print("Not found")
但這里要說的重點不是這個語法的用處,而是這個語法的關鍵字選擇。實際上如果稍微了解一點編程元素的話,很可能參考if...else的用法,把for...else的意思理解為:如果循環沒有正常執行完畢(即被break打斷),則執行else部分。但從實際作用上來講(即“循環正常執行完則執行else部分”),顯然用for...then或者for...continue都是更好的選擇。
那么為什么Python非常神奇地選擇了用else作為關鍵字呢?突然想到后突然好奇,實在忍不住查了一下后發現一個個人認為最有說服力的是“因為while是if更普遍的形式”。例如對于如下if...else代碼:
if condition:
...
else:
...
實際上可以寫為:
while condition:
...
break
else:
...
也就是所if可以視為while的一個特殊形式,那么有趣的來了。
在上面的while...else中,如果沒有break,那么只有當condition為false時才會終止循環那么,而當condition為false時,顯然就會執行一次else部分。
即:如果沒有遇到break則意味著else部分尚有機會執行。
另一方面,如果遇到了break,就意味著跳出了while...else塊,也就是說不會再檢查condition,自然也不會再執行else部分。
即:如果碰到了break則else部分不再會被執行。
然后又因為for是while的特殊性形式,所以...
另外Python也支持while...for循環,而這個這個看起來就比較符合直覺了:
ok = True
while ok:
ok = False
else:
print("ABC")
盡管如此,由于for...else的反直覺設計會讓人迷惑,在實際中并不推薦使用,如果只是為了跳出,封裝成函數return是更好的選擇。如果真的要用,就寫下注釋。
【參考資料】:
【1】Why does python use 'else' after for and while loops?
標題名稱:閑的蛋疼
分享URL:http://www.yijiale78.com/article14/dsogige.html
成都網站建設公司_創新互聯,為您提供域名注冊、響應式網站、動態網站、網頁設計公司、虛擬主機、定制開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯