十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
事實(shí)上,Python的標(biāo)準(zhǔn)語法是不支持跳出多重循環(huán)的,所以只能利用一些技巧,大概的思路有:寫成函數(shù)、利用笛卡爾積、利用調(diào)試。
創(chuàng)新互聯(lián)專業(yè)為企事業(yè)單位提供成都網(wǎng)站建設(shè)公司、成都網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化、微信開發(fā)、手機(jī)網(wǎng)站建設(shè)、域名申請(qǐng)、雅安服務(wù)器托管、企業(yè)郵箱等互聯(lián)網(wǎng)基礎(chǔ)服務(wù)。從2013年創(chuàng)立,我們先后簽約上千余家中小型企業(yè)和科技發(fā)展公司的網(wǎng)站建設(shè)和網(wǎng)站推廣項(xiàng)目。通過多年的創(chuàng)新發(fā)展,已發(fā)展成為專業(yè)能力較強(qiáng),服務(wù)較好的建站公司。
寫成函數(shù)
在Python中,函數(shù)運(yùn)行到return這一句就會(huì)停止,因此可以利用這一特性,將功能寫成函數(shù),終止多重循環(huán),例如
def work(): for i in range(10): for j in range(10): if i+j 5: return i,jprint work()
利用笛卡爾積
這種方法的思路就是,既然可以跳出單循環(huán),我就將多重循環(huán)改寫為單循環(huán),這可以利用itertools中的笛卡爾積函數(shù)product,例如
from itertools import productfor i,j in product(range(10), range(10)): if i+j 5: print i,j break
利用調(diào)試模式
笛卡爾積的方式很巧妙,也很簡潔,但它只能用于每次循環(huán)的集合都是獨(dú)立的情形,假如每層循環(huán)都與前一層緊密相關(guān),就不能用這種技巧了。這時(shí)候可以用第一種方法,將它寫成函數(shù),另外,還可以利用調(diào)試模式。這個(gè)利用了調(diào)試模式中,只要出現(xiàn)報(bào)錯(cuò)就退出的原理,它偽裝了一個(gè)錯(cuò)誤出來。
class Found(Exception): passtry: for i in range(10): for j in range(i): #第二重循環(huán)跟第一重有關(guān) if i + j 5: raise Foundexcept Found: print i, j
Python中可以加斷點(diǎn)調(diào)試
斷點(diǎn)(break point)是指在代碼中指定位置,當(dāng)程序運(yùn)行到此位置時(shí)便中斷下來,并讓開發(fā)者可查看此時(shí)各變量的值。
因斷點(diǎn)中斷的程序并沒有結(jié)束,可以選擇繼續(xù)執(zhí)行。
實(shí)現(xiàn)斷點(diǎn)調(diào)試需要 IDE 的支持。下面以 PyCharm 來演示一下
在某一行代碼的左側(cè)欄點(diǎn)擊,就可以在這行增加斷點(diǎn)?,F(xiàn)在在 3 個(gè) if 判斷的地方都加上斷點(diǎn)。
選擇 debug,程序開始運(yùn)行。
輸入 a、b 兩個(gè)值之后,程序就在第一個(gè) if 處中斷,并且在工具欄中顯示出當(dāng)前程序中的各種數(shù)值。
選擇“resume program”,程序就會(huì)繼續(xù)執(zhí)行,直到遇到下一個(gè)斷點(diǎn)。
有了斷點(diǎn)功能的幫助,調(diào)試的時(shí)候就方便許多,很容易觀察程序運(yùn)行時(shí)的狀態(tài)。
在斷點(diǎn)調(diào)試時(shí),還有個(gè)經(jīng)常一起使用的功能就是單步調(diào)試。
在程序中斷時(shí),選擇“Step Over”,會(huì)向下執(zhí)行一行代碼后繼續(xù)中斷。
當(dāng)所處代碼行中有函數(shù)時(shí),“Step Into”會(huì)中斷在函數(shù)內(nèi)部,之后將在其中單步執(zhí)行。對(duì)應(yīng)的,“Step Out”將中斷在執(zhí)行完當(dāng)前所在函數(shù)后的位置。
這些操作在工具欄有快捷按鈕,也可通過快捷鍵操作。
更多Python知識(shí),請(qǐng)關(guān)注:Python自學(xué)網(wǎng)!!
會(huì)導(dǎo)致系統(tǒng)位置錯(cuò)誤。
在多任務(wù)系統(tǒng)下,中斷可能在任務(wù)執(zhí)行的任何時(shí)間發(fā)生,如果一個(gè)函數(shù)的執(zhí)行期間被中斷后,到重新恢復(fù)到斷點(diǎn)進(jìn)行執(zhí)行的過程中,函數(shù)所依賴的環(huán)境沒有發(fā)生改變,那么這個(gè)函數(shù)就是可重入的,否則就不可重入。
在多任務(wù)系統(tǒng)下,中斷可能在任務(wù)執(zhí)行的任何時(shí)間發(fā)生,如果一個(gè)函數(shù)的執(zhí)行期間被中斷后,到重新恢復(fù)到斷點(diǎn)進(jìn)行執(zhí)行的過程中,函數(shù)所依賴的環(huán)境沒有發(fā)生改變,那么這個(gè)函數(shù)就是可重入的,否則就不可重入。
9.8. 異常也是類
用戶自定義異常也可以是類。利用這個(gè)機(jī)制可以創(chuàng)建可擴(kuò)展的異常體系。
以下是兩種新的,有效的(語義上的)異常拋出形式,使用 raise 語句:
raise Class
raise Instance
第一種形式中,Class 必須是 type 或其派生類的一個(gè)實(shí)例。第二種形式是以下形式的簡寫:
raise Class()
發(fā)生的異常其類型如果是 except 子句中列出的類,或者是其派生類,那么它們就是相符的(反過來說--發(fā)生的異常其類型如果是異常子句中列出的類的基類,它們就不相符)。例如,以下代碼會(huì)按順序打印 B,C,D:
class B(Exception):
pass
class C(B):
pass
class D(C):
pass
for cls in [B, C, D]:
try:
raise cls()
except D:
print("D")
except C:
print("C")
except B:
print("B")
要注意的是如果異常子句的順序顛倒過來( execpt B 在最前),它就會(huì)打印 B,B,B--第一個(gè)匹配的異常被觸發(fā)。
打印一個(gè)異常類的錯(cuò)誤信息時(shí),先打印類名,然后是一個(gè)空格、一個(gè)冒號(hào),然后使用內(nèi)置函數(shù) str() 將類轉(zhuǎn)換得到的完整字符串。
一個(gè)帶有 yield 的函數(shù)就是一個(gè) generator,它和普通函數(shù)不同,生成一個(gè) generator 看起來像函數(shù)調(diào)用,但不會(huì)執(zhí)行任何函數(shù)代碼,直到對(duì)其調(diào)用 next()(在 for 循環(huán)中會(huì)自動(dòng)調(diào)用 next())才開始執(zhí)行。雖然執(zhí)行流程仍按函數(shù)的流程執(zhí)行,但每執(zhí)行到一個(gè) yield 語句就會(huì)中斷,并返回一個(gè)迭代值,下次執(zhí)行時(shí)從 yield 的下一個(gè)語句繼續(xù)執(zhí)行??雌饋砭秃孟褚粋€(gè)函數(shù)在正常執(zhí)行的過程中被 yield 中斷了數(shù)次,每次中斷都會(huì)通過 yield 返回當(dāng)前的迭代值。
具體,請(qǐng)參考下以下資料:
函數(shù)內(nèi)用 return
函數(shù)外用 exit()
說明,函數(shù)內(nèi)也可用 exit() 停止后面的指令執(zhí)行,但這樣會(huì)使基于函數(shù)的線程出現(xiàn)問題,所以不建議在函數(shù)內(nèi)使用 exit(),函數(shù)內(nèi)如果不想執(zhí)行指令了,最好用 return 進(jìn)行結(jié)束函數(shù),這樣可以把控制權(quán)交給主調(diào)函數(shù),而不是退出程序
擴(kuò)展資料:
return語句是python語言中函數(shù)返回的一個(gè)值,每個(gè)函數(shù)都應(yīng)該有一個(gè)返回值,其中,return返回值可以是一個(gè)數(shù)值,一個(gè)字符串,一個(gè)布爾值,一個(gè)列表,或者函數(shù)。
在Python中return函數(shù)返回值return,函數(shù)中一定要有return返回值才是完整的函數(shù),如果用戶沒有定義Python函數(shù)返回值,那么得到的結(jié)果是None對(duì)象。