閑的蛋疼

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

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比巴彥淖爾網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式巴彥淖爾網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋巴彥淖爾地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

for i in range(0,100):
    if i == 3:
        break
else:
    print("Not found")

該語句表示:若for循環(huán)遍歷完畢,則執(zhí)行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")

但這里要說的重點不是這個語法的用處,而是這個語法的關(guān)鍵字選擇。實際上如果稍微了解一點編程元素的話,很可能參考if...else的用法,把for...else的意思理解為:如果循環(huán)沒有正常執(zhí)行完畢(即被break打斷),則執(zhí)行else部分。但從實際作用上來講(即“循環(huán)正常執(zhí)行完則執(zhí)行else部分”),顯然用for...then或者for...continue都是更好的選擇。

那么為什么Python非常神奇地選擇了用else作為關(guān)鍵字呢?突然想到后突然好奇,實在忍不住查了一下后發(fā)現(xiàn)一個個人認為最有說服力的是“因為while是if更普遍的形式”。例如對于如下if...else代碼:

if condition:
    ...
else:
    ...

實際上可以寫為:

while condition:
    ...
    break
else:
    ...

也就是所if可以視為while的一個特殊形式,那么有趣的來了。

在上面的while...else中,如果沒有break,那么只有當condition為false時才會終止循環(huán)那么,而當condition為false時,顯然就會執(zhí)行一次else部分。

即:如果沒有遇到break則意味著else部分尚有機會執(zhí)行。

另一方面,如果遇到了break,就意味著跳出了while...else塊,也就是說不會再檢查condition,自然也不會再執(zhí)行else部分。

即:如果碰到了break則else部分不再會被執(zhí)行。

然后又因為for是while的特殊性形式,所以...

另外Python也支持while...for循環(huán),而這個這個看起來就比較符合直覺了:

ok = True

while ok:
    ok = False
else:
    print("ABC")

盡管如此,由于for...else的反直覺設(shè)計會讓人迷惑,在實際中并不推薦使用,如果只是為了跳出,封裝成函數(shù)return是更好的選擇。如果真的要用,就寫下注釋。

【參考資料】:

【1】Why does python use 'else' after for and while loops?

標題名稱:閑的蛋疼
分享URL:http://m.kartarina.com/article14/dsogige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊響應(yīng)式網(wǎng)站動態(tài)網(wǎng)站網(wǎng)頁設(shè)計公司虛擬主機定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
主站蜘蛛池模板: 亚洲精品无码成人| 6080YYY午夜理论片中无码| 无码人妻丰满熟妇区五十路| 精品久久久久久久无码| 老司机无码精品A| 国产AV一区二区三区无码野战| 无码人妻久久久一区二区三区| 无码国内精品久久综合88| 国模无码一区二区三区不卡| 无码视频免费一区二三区| 13小箩利洗澡无码视频网站免费| 精品人妻大屁股白浆无码| 亚洲熟妇少妇任你躁在线观看无码 | 日韩人妻无码精品系列| 精品无码免费专区毛片| 综合无码一区二区三区| 无码一区18禁3D| 日韩人妻无码中文字幕视频| 亚洲?V无码成人精品区日韩 | AV无码精品一区二区三区| 国产成人无码一区二区三区在线 | 惠民福利中文字幕人妻无码乱精品 | 中文字幕av无码一区二区三区电影 | 国产精品亚洲专区无码牛牛| av无码久久久久久不卡网站| 国产精品亚洲аv无码播放| 日韩精品无码人成视频手机| 久久亚洲国产成人精品无码区| av色欲无码人妻中文字幕| 亚洲GV天堂GV无码男同| 无码精品黑人一区二区三区| 国产成年无码久久久久毛片| 久久精品无码av| 亚洲精品无码久久久影院相关影片| 午夜成人无码福利免费视频| av无码a在线观看| 中文字幕在线无码一区| 成人免费无码H在线观看不卡| 亚洲精品无码久久久久AV麻豆| 国产精品亚洲专区无码不卡| 特级毛片内射www无码|