Python中for后接else的語法使用
0、背景
今天看到了一個(gè)比較詭異的寫法,for后直接跟了else語句,起初還以為是沒有縮進(jìn)好,查詢后發(fā)現(xiàn)果然有這種語法,特此分享。之前寫過c++和Java,在for后接else還是第一次見。
1、試驗(yàn)
# eg1 import numpy as np for i in np.arange(5): print i else: print("hello?") # 0 # 1 # 2 # 3 # 4 # hello?
可以發(fā)現(xiàn),在for正常結(jié)束后,break中的語句進(jìn)行了執(zhí)行。
# eg2 import numpy as np for i in np.arange(5): print i if (i == 3): break else: print("hello?") # 0 # 1 # 2 # 3
在這個(gè)例子當(dāng)中,i==3的時(shí)候break出了循環(huán),然后else當(dāng)中的語句就沒有執(zhí)行。
2、總結(jié)
總結(jié)起來比較簡單,如果for循環(huán)正常結(jié)束,else中語句執(zhí)行。如果是break的,則不執(zhí)行。
工程性代碼寫的比較少,暫時(shí)沒有想到很好的場(chǎng)景,為了不對(duì)其他同學(xué)造成干擾,這種形式還是少些一點(diǎn)較好。
官方文檔也有解釋:
When the items are exhausted (which is immediately when the sequence is empty), the suite in the else clause, if present, is executed, and the loop terminates.
A break statement executed in the first suite terminates the loop without executing the else clause's suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there was no next item.
https://docs.python.org/2/reference/compound_stmts.html#the-for-statement
補(bǔ)充:python里for和else的搭配
用找質(zhì)數(shù)作為代碼示例
for i in range(2,10): for n in range(2,i): if i % n == 0: #print(i, '=', n, '*', i//n) break else: print('found it %s' %i)
注意:這里的 else 并不屬于 if 代碼塊
根據(jù)官方文檔的解釋理解的意思:當(dāng)?shù)膶?duì)象迭代完并為空時(shí),位于else的語句將會(huì)執(zhí)行,而如果在for循環(huán)里有break時(shí),則會(huì)直接終止循環(huán),并不會(huì)執(zhí)行else里的代碼
寫一個(gè)簡單例子,用來輔助理解
for i in range(10): if i == 7: print('found it %s'%i) break else: print('not found')
可以先運(yùn)行代碼,看一下運(yùn)行結(jié)果,然后將代碼塊里的break注釋掉再運(yùn)行一遍,與第一次運(yùn)行的結(jié)果進(jìn)行比較,就會(huì)發(fā)現(xiàn)不同
補(bǔ)充:python中for—else的用法,執(zhí)行完for執(zhí)行else
結(jié)束for循環(huán)后執(zhí)行else
for i in range(5): print(i) else: print("打印else")
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入探討PythonLogging模塊的高級(jí)用法與性能優(yōu)化
在Python應(yīng)用程序中,日志處理是一項(xiàng)至關(guān)重要的任務(wù),本文將探索Logging模塊的高級(jí)用法,包括日志級(jí)別、格式化、處理程序等方面的功能,需要的可以參考下2024-04-04python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例
這篇文章主要介紹了python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Django使用Celery異步任務(wù)隊(duì)列的使用
這篇文章主要介紹了Django使用Celery異步任務(wù)隊(duì)列的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03簡介二分查找算法與相關(guān)的Python實(shí)現(xiàn)示例
這篇文章主要介紹了二分查找算法與相關(guān)的Python實(shí)現(xiàn)示例,Binary Search同時(shí)也是算法學(xué)習(xí)當(dāng)中最基礎(chǔ)的知識(shí),需要的朋友可以參考下2015-08-08Python多進(jìn)程入門、分布式進(jìn)程數(shù)據(jù)共享實(shí)例詳解
這篇文章主要介紹了Python多進(jìn)程入門、分布式進(jìn)程數(shù)據(jù)共享,結(jié)合實(shí)例形式詳細(xì)分析了Python進(jìn)程操作技巧數(shù)據(jù)共享相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2019-06-06python獲取外網(wǎng)ip地址的方法總結(jié)
這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實(shí)例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下2015-07-07詳解python如何在django中為用戶模型添加自定義權(quán)限
這篇文章主要介紹了python如何在django中為用戶模型添加自定義權(quán)限,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10