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