真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

閑的蛋疼

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,那么只有當(dāng)condition為false時才會終止循環(huán)那么,而當(dāng)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?


本文題目:閑的蛋疼
當(dāng)前地址:http://weahome.cn/article/dsogige.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部