Python編程中特有的循環(huán)語句及其特點(diǎn)
Python編程的追求的就是簡單而優(yōu)雅,既無所不能,又接近人的自然表達(dá)模式。毋庸置疑,其簡潔而不簡單的魔力吸引力大量的擁躉。即便其語法和內(nèi)置函數(shù)等,如若能簡寫或縮寫的,那就絕不會(huì)完整地寫出來。如果你習(xí)慣了這種寫法,再去看看“Spring式”長命名,你簡直都懷疑自己當(dāng)初為什么要敲那么多次鍵盤——難道是為了鍛煉身體?
有點(diǎn)跑遠(yuǎn)了,回到主題上來。我們知道,標(biāo)準(zhǔn)的代碼執(zhí)行流程的控制語句,就這么幾種:順序執(zhí)行、條件執(zhí)行、循環(huán)執(zhí)行以及這幾種的組合或/和嵌套。各類編程語(如C/C++、Java、JavaScript、PHP、go等)在具體語法上實(shí)現(xiàn)各有差異,但基本雷同:if-else結(jié)構(gòu)、while結(jié)構(gòu)、for結(jié)構(gòu)等。
這里要說的是Python的循環(huán)結(jié)構(gòu)語法的常規(guī)拓展模式,以while為例,其常規(guī)語法結(jié)構(gòu)如下:
while condition:
#循環(huán)體
pass
這是典型的使用形式。其拓展結(jié)構(gòu)如下:
while conditon:
#循環(huán)體
pass
else:
#while循環(huán)體執(zhí)行完
pass
這種while-else結(jié)構(gòu)與if-else結(jié)構(gòu)不同之處在于if結(jié)構(gòu)下只能執(zhí)行其中的一種情況(滿足條件的),而while結(jié)構(gòu)通常兩部分都會(huì)執(zhí)行的。示例如下:
counter =0
while counter<5:
counter+=1
print(f"counter={counter}")
else:
print(f"while結(jié)束了,進(jìn)入else部分:當(dāng)前counter={counter}")
運(yùn)行上面的代碼,輸出結(jié)果如下:
counter=1
counter=2
counter=3
counter=4
counter=5
while結(jié)束了,進(jìn)入else部分:當(dāng)前counter=5
這個(gè)代碼沒啥故事,也容易理解。但我換一種形式再看看效果:
counter =0
while True:
counter+=1
print(f"counter={counter}")
if counter>=5:
break
else:
print(f"while結(jié)束,else部分...,counter={counter}")
運(yùn)行程序,輸出類似如下:
counter=1
counter=2
counter=3
counter=4
counter=5
完?duì)僮恿耍琫lse部分不執(zhí)行了……
當(dāng)然,Python的for-else結(jié)構(gòu)也一樣,這里就不舉例了,有興趣的自己試試。這里我想說的是,在Python的“循環(huán)-else”結(jié)構(gòu)中,如果使用了break提出循環(huán),它就跳出了整個(gè)循環(huán)結(jié)構(gòu),而循環(huán)所帶的else部分也是整個(gè)循環(huán)的一部分。所以,想在循環(huán)體工作結(jié)束后再干點(diǎn)掃尾工作,那一定注意不要用break跳出。
當(dāng)初我在給學(xué)生介紹這個(gè)結(jié)構(gòu)時(shí),說這個(gè)語法貌似沒有很雞肋。你Python不是追求簡潔嗎,為while/for添個(gè)else,沒有它會(huì)死嗎?你想在else里干的事情,不用else也一樣能干。
后來我遵循Python的“人性化”指導(dǎo)哲學(xué)又想了想:這就像在飯店里吃飯,正常吃完結(jié)賬(正常事情),出去時(shí)順帶在飯店門口抓把糖倒杯水(掃尾工作);但如果你吃飯時(shí)吃出個(gè)異物來,不能繼續(xù)愉快就餐了走了(非正常終止-break了),哪還有心情喝水吃糖?——可能就是這個(gè)意思吧 ^_& 。
Python編程還是很有意思的,但更多在于用Python去解決實(shí)際問題。所以Python語法很容易學(xué),但要能靈活的使用Python去解決問題還有很多庫和框架需要學(xué)習(xí)。
今天就寫這些了,其它Python特異的編程特殊實(shí)現(xiàn),下次再寫。