中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么不要在for與while循環后寫else塊

發布時間:2021-10-18 11:11:57 來源:億速云 閱讀:142 作者:iii 欄目:編程語言

這篇文章主要講解了“為什么不要在for與while循環后寫else塊”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“為什么不要在for與while循環后寫else塊”吧!

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

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

def coprime(a, b):     for i in range(2, min(a, b) + 1):         if a % i == 0 and b % i == 0:             return False     return True  assert coprime(4, 9) assert not coprime(3, 6)

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

def coprime_alternate(a, b):     is_coprime = True     for i in range(2, min(a, b) + 1):         if a % i == 0 and b % i == 0:             is_coprime = False             break     return is_coprime assert coprime_alternate(4, 9) assert not coprime_alternate(3, 6)

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

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

要點

  • Python有種特殊的語法,可以把else塊緊跟在整個for循環或while循環的后面。

  • 只有在整個循環沒有因為break提前跳出的情況下,else塊才會執行。

  • 把else塊緊跟在整個循環后面,會讓人不太容易看出這段代碼的意思,所以要避免這樣寫。

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

for i in range(3):     print('Loop', i) else:     print('Else block!') >>> Loop 0 Loop 1 Loop 2 Else block!

奇怪的是,程序做完整個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塊。

for i in range(3):     print('Loop', i)     if i==1:         break else:     print('Else b1ock!') >>> Loop 0 Loop 1

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

for x in []:     print('Never runs') else:     print('For Else block!') >>> For Else block!

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

while False:     print('Never runs') else:     print('While Else block!') >>> While Else block!

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

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

a = 4 b = 9 for i in range(2, min(a, b) + 1):     print('Testing',i)     if a % i == 0 and b % i == 0:         print('Not coprime')         break else:     print('Coprime') >>> Testing 2 Testing 3 Testing 4 Coprime

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

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

def coprime(a, b):     for i in range(2, min(a, b) + 1):         if a % i == 0 and b % i == 0:             return False     return True  assert coprime(4, 9) assert not coprime(3, 6)

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

def coprime_alternate(a, b):     is_coprime = True     for i in range(2, min(a, b) + 1):         if a % i == 0 and b % i == 0:             is_coprime = False             break     return is_coprime assert coprime_alternate(4, 9) assert not coprime_alternate(3, 6)

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

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

要點

  • Python有種特殊的語法,可以把else塊緊跟在整個for循環或while循環的后面。

  • 只有在整個循環沒有因為break提前跳出的情況下,else塊才會執行。

  • 把else塊緊跟在整個循環后面,會讓人不太容易看出這段代碼的意思,所以要避免這樣寫。

感謝各位的閱讀,以上就是“為什么不要在for與while循環后寫else塊”的內容了,經過本文的學習后,相信大家對為什么不要在for與while循環后寫else塊這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舟山市| 柳河县| 射阳县| 镇赉县| 台州市| 中西区| 天柱县| 六盘水市| 郑州市| 荆门市| 镇赉县| 长岛县| 章丘市| 天柱县| 镇原县| 庄河市| 马尔康县| 蓝田县| 会东县| 南溪县| 长顺县| 永州市| 古丈县| 汤原县| 同心县| 麻城市| 江山市| 民勤县| 焦作市| 永靖县| 汕头市| 盐池县| 吉林市| 炉霍县| 黄大仙区| 桃源县| 日喀则市| 休宁县| 黄石市| 班玛县| 石柱|