首页
/
每日頭條
/
生活
/
python怎麼使用快捷鍵寫ifelse
python怎麼使用快捷鍵寫ifelse
更新时间:2025-04-17 23:08:24

導讀:本文會詳細介紹一個小技巧,幫助你用符合Python風格的方式(Pythonic方式)來編寫程序。

作者:布雷特·斯拉特金(Brett Slatkin)

來源:華章科技

python怎麼使用快捷鍵寫ifelse(不要在for與while循環後寫else塊)1

Python的循環有一項大多數編程語言都不支持的特性,即可以把else塊緊跟在整個循環結構的後面。

foriinrange(3): print('Loop',i) else: print('Elseblock!') >>> Loop0 Loop1 Loop2 Elseblock!

奇怪的是,程序做完整個for循環之後,竟然會執行else塊裡的内容。既然是這樣,那為什麼要叫“else”呢?這應該叫“and”才對。在if/else結構裡,else的意思是:如果沒執行前面那塊語句,那就執行else塊。在try/except結構裡,except也是這個意思:如果前面那塊語句執行失敗,那就執行except塊。

try/except/else結構裡的else依然遵循這樣的理念,它的意思是:如果沒有異常需要處理,那就執行這塊語句。try/finally結構裡的finally同樣很直觀,意思是:不管前面那塊代碼執行得如何,最後都要執行finally塊代碼。

了解了else、except、finally等在上面那些結構裡的用法,Python新手可能就覺得,for/else結構裡的else也是這個意思,即如果循環沒有從頭到尾執行完,那就執行else塊。實際上恰恰相反,如果循環沒有從頭到尾執行完(也就是循環提前終止了),那麼else塊裡的代碼是不會執行的。在循環中使用break語句實際上會跳過else塊。

foriinrange(3): print('Loop',i) ifi==1: break else: print('Elseb1ock!') >>> Loop0 Loop1

還有一個奇怪的地方是,如果對空白序列做for循環,那麼程序立刻就會執行else塊。

forxin[]: print('Neverruns') else: print('ForElseblock!') >>> ForElseblock!

while循環也是這樣,如果首次循環就遇到False,那麼程序也會立刻運行else塊。

whileFalse: print('Neverruns') else: print('WhileElseblock!') >>> WhileElseblock!

把else設計成這樣,是想讓你利用它實現搜索邏輯。

例如,如果要判斷兩個數是否互質(也就是除了1之外,是不是沒有别的數能夠同時整除它們),就可以用這種結構實現。先把有可能同時整除它們的數逐個試一遍,如果全都試過之後還是沒找到這樣的數,那麼循環就會從頭到尾執行完(這意味着循環沒有因為break而提前跳出),然後程序就會執行else塊裡的代碼。

a=4 b=9 foriinrange(2,min(a,b) 1): print('Testing',i) ifa%i==0andb%i==0: print('Notcoprime') break else: print('Coprime') >>> Testing2 Testing3 Testing4 Coprime

實際工作中,筆者不會這樣寫,而是會改用輔助函數完成計算。這樣的輔助函數有兩種常見的寫法。

第一種寫法是,隻要發現某個條件成立,就立刻返回,如果始終都沒碰到這種情況,那麼循環就會完整地執行,讓程序返回函數末尾的那個值作為默認返回值。

defcoprime(a,b): foriinrange(2,min(a,b) 1): ifa%i==0andb%i==0: returnFalse returnTrue assertcoprime(4,9) assertnotcoprime(3,6)

第二種寫法是,用變量來記錄循環過程中有沒有碰到這樣的情況,如果有,那就用break提前跳出循環,如果沒有,循環就會完整地執行,無論如何,最後都返回這個變量的值。

defcoprime_alternate(a,b): is_coprime=True foriinrange(2,min(a,b) 1): ifa%i==0andb%i==0: is_coprime=False break returnis_coprime assertcoprime_alternate(4,9) assertnotcoprime_alternate(3,6)

對于不熟悉for/else結構的人來說,剛才那兩種寫法都是比較清晰的方案,大家可以根據情況選擇其中的一種。

for/else或while/else結構本身雖然可以實現某些邏輯表達,但它給讀者(也包括你自己)帶來的困惑,已經蓋過了它的好處。因為for與while循環這種簡單的結構,在Python裡面讀起來應該相當明了才對,如果把else塊緊跟在它的後面,那就會讓代碼産生歧義。所以,請不要這麼寫。

要點

  • Python有種特殊的語法,可以把else塊緊跟在整個for循環或while循環的後面。
  • 隻有在整個循環沒有因為break提前跳出的情況下,else塊才會執行。
  • 把else塊緊跟在整個循環後面,會讓人不太容易看出這段代碼的意思,所以要避免這樣寫。

關于作者:布雷特·斯拉特金(Brett Slatkin),Google首席軟件工程師,他是Google Surveys的聯合技術創始人,也是PubSubHubbub協議的共同創造者之一。此外,Slatkin還發布了Google的第一個雲計算産品——App Engine。早在15年前,Slatkin就開始在工作中使用Python管理Google大量的服務器群。他擁有紐約哥倫比亞大學計算機工程專業學士學位。

本文摘編自《Effective Python:編寫高質量Python代碼的90個有效方法》(原書第2版),經出版方授權發布。

python怎麼使用快捷鍵寫ifelse(不要在for與while循環後寫else塊)2

延伸閱讀《Effective Python》(原書第2版)

推薦語:Python編程進階必讀,基于Python3.8,新增31條建議!掌握Pythonic編程方式,寫出高質量代碼|進階到編程高手的程序員修煉之道和代碼整潔之道。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
中秋節的三個神話故事
中秋節的三個神話故事
中秋節的三個神話故事分别是,嫦娥奔月、吳剛折桂和玉兔搗藥。神話故事是中國古代人們經過長期的社會實踐,在勞動生活的過程中創造出來的一種文學樣式,它是人類幼年時期通過幻想對天地宇宙、人類起源、自然萬物、生命探索、部族戰争、勞動生活的稚拙的解說。中國神話故事展現了中國古代人們對天地萬物天真、樸素、真誠、美...
2025-04-17
大瓶礦泉水打開後能放幾天
大瓶礦泉水打開後能放幾天
大瓶礦泉水打開後一般可以放1至2天左右,最好不要超過2天,以免細菌在水内滋生繁殖,導緻礦泉水變質,進而影響人體健康。未開封的礦泉水的保質期一般是一年,打開後或多或少會受到細菌影響,最好盡快飲用完。礦泉水瓶一般采用的是一次性塑料制成的,建議最好不要重複使用,也最好不要用開水浸燙,以免礦泉水瓶析出有害物...
2025-04-17
紫外線消毒燈使用壽命是多長時間
紫外線消毒燈使用壽命是多長時間
紫外線消毒燈的使用壽命一般在2—4年左右。紫外線消毒燈在使用一段時間後,其消毒能力會逐漸下降,一般在連續使用2000小時左右,紫外線消毒燈的消毒能力就會下降到原來的70%—80%左右,進口的紫外線消毒燈使用壽命則會長一些。紫外線消毒燈是一種給利用紫外線進行殺菌的消毒燈具,也叫做紫外線殺菌燈、紫外線熒...
2025-04-17
京東雙十一買電腦便宜多少
京東雙十一買電腦便宜多少
一年一度雙十一大促優惠即将開始,很多小夥伴也都開始關注各大平台的促銷優惠力度。京東雙十一買電腦便宜多少?每年雙十一購買電腦的用戶也有不少,大家也都會選擇京東平台下單,下面來看下今年京東雙十一電腦的優惠力度到底大不大?京東雙十一買電腦便宜多少?京東雙十一3C會場從11月1日截止到11月9日,按照每天分...
2025-04-17
鮮竹筍怎麼保存
鮮竹筍怎麼保存
鮮竹筍建議使用冰箱或密封的容器進行保存。鮮竹筍在保存時比較需要注意的主要是如何保留水分,失去了水分的鮮竹筍一般就不“鮮”了,冰箱和密封的容器一般可以在短期内較好的保留竹筍内的水分。在使用密封容器保存鮮竹筍時,建議盡量将容器放置于避光陰涼的地方,高溫或被太陽照射都有可能造成容器内竹筍的水分流失。在使用...
2025-04-17
Copyright 2023-2025 - www.tftnews.com All Rights Reserved