




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《Python開發(fā)技術(shù)應(yīng)用》61上下文管理上下文管理器上下文管理器,是一個(gè)包裝其他代碼的對象,用于處理那些事先需要設(shè)置,事后需要做清理工作的事務(wù)。使用上下文管理器最多的場景是文件對象。在使用文件對象時(shí),最簡陋的做法是這樣的:f=open("/tmp/test.txt")f.write('程序日志:測試1\n') #假設(shè)這就是要做的全部工作f.close()上下文管理器如果忘記調(diào)用file.close()方法,會(huì)存在兩個(gè)問題:如果在程序運(yùn)行結(jié)束之前發(fā)生藍(lán)屏、斷電等情況,已經(jīng)寫入但暫未緩沖的數(shù)據(jù)會(huì)丟失。在程序運(yùn)行結(jié)束之前,打開的文件會(huì)被占用,其他程序或用戶將無法修改、移動(dòng)或刪除這個(gè)文件?,F(xiàn)在給這些代碼加上finally語句:f=open("/tmp/test.txt")try:f.write('程序日志:測試1\n') #假設(shè)這就是要做的全部工作finally:f.close()這段代碼可以改寫為:withopen("/tmp/foo.txt")asf:
f.write('程序日志:測試1\n')上下文管理器使用with語句打開文件,把相關(guān)工作放在其下的語句塊中,當(dāng)語句塊結(jié)束的時(shí)候,會(huì)自動(dòng)完成清理工作,相當(dāng)于添加了一套finally子句。這就是上下文管理器。支持上下文管理的對象文件對象之所以能夠使用上下文管理器,是因?yàn)槲募愋蛯?shí)現(xiàn)了__enter__()和__exit__()兩個(gè)特殊的方法。其中__enter__()是在進(jìn)入上下文管理器的時(shí)候自動(dòng)調(diào)用,__exit__()是在退出上下文管理器時(shí)自動(dòng)調(diào)用。withopen("/tmp/foo.txt")asf:
f.write('程序日志:測試1\n')#后續(xù)代碼...支持上下文管理的對象隱性調(diào)用了f.__enter__()隱性調(diào)用了f.__exit__()案例:設(shè)計(jì)一個(gè)代表平面坐標(biāo)點(diǎn)的類Point,支持上下文管理為了方便計(jì)算平面坐標(biāo)距離,設(shè)計(jì)一個(gè)Point類,其功能如下:要求實(shí)現(xiàn)運(yùn)算符重載(魔術(shù))方法__sub__(),用于兩個(gè)Point對象直接用減法運(yùn)算符(-)進(jìn)行運(yùn)算,得到坐標(biāo)間的距離;要求實(shí)現(xiàn)__str__()方法,用于在print()函數(shù)進(jìn)行打印時(shí)顯示坐標(biāo)值;要求實(shí)現(xiàn)__enter__()和__exit__()兩個(gè)方法用于支持上下文管理器。支持上下文管理的對象A(4,5)AxAyYXOByBxB(-3,3)|AB|...A=Point(4,5)B=Point(-3,3)distance=A-B#要求Point類支持減法print(distance)執(zhí)行結(jié)果:7.280109889280518支持上下文管理的對象123456789101112131415161718192021222324252627classPoint:def__init__(self,x,y):self.x,self.y=x,ydef__sub__(self,other):#實(shí)現(xiàn)此方法可以支持減法運(yùn)算
ifother.__class__==self.__class__:return((self.x-other.x)**2+(self.y-other.y)**2)**0.5else:#如果不是同類型的Point對象相減,拋出ValueError異常
raiseTypeError("incorrectcoordinateparametertype")def__str__(self):returnf"Point({self.x},{self.y})"def__enter__(self):#此方法在進(jìn)入with語句時(shí)自動(dòng)調(diào)用
print(f'{self.y}進(jìn)入上下文管理器')
returnself#必須將當(dāng)前對象返回給上下文管理器
def__exit__(self,exc_type,exc_val,exc_tb):#此方法在離開with語句時(shí)自動(dòng)調(diào)用
print(f'{self.y}離開上下文管理器,完成清理工作')A=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鋰電池正極材料市場發(fā)展趨勢及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國鋁冶煉行業(yè)運(yùn)行動(dòng)態(tài)與前景趨勢分析報(bào)告
- 2025-2030年中國菱鎂礦產(chǎn)業(yè)競爭格局與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國聯(lián)苯雙酯行業(yè)市場運(yùn)行狀況與十三五規(guī)劃分析報(bào)告
- 2025-2030年中國粘玉米行業(yè)規(guī)模分析及發(fā)展建議研究報(bào)告
- 2025-2030年中國空管系統(tǒng)市場十三五規(guī)劃與投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國畜禽養(yǎng)殖中抗生素行業(yè)發(fā)展?fàn)顩r及投資戰(zhàn)略研究報(bào)告
- 東北財(cái)經(jīng)大學(xué)《中醫(yī)護(hù)理學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東江門幼兒師范高等專科學(xué)?!睹嫦?qū)ο笈c可視化編程》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州工商學(xué)院《健康服務(wù)與營銷學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 防暴隊(duì)形演練和講解
- 2024年醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范培訓(xùn)課件
- 廣電和通信設(shè)備電子裝接工(高級工)理論考試復(fù)習(xí)題庫(含答案)
- 2024年河南住戶調(diào)查業(yè)務(wù)題庫
- 天車安全操作培訓(xùn)教材
- 《籃球運(yùn)球》教案(共四篇)
- 國企關(guān)于違反“三重一大”決策制度責(zé)任追究辦法
- CRF病例報(bào)告表模板
- 九上下冊物理人教版九年級物理全冊第十九章《生活用電》第3節(jié)《安全用電》課件(42張)公開課教案
- 2024年計(jì)算機(jī)二級WPS考試題庫380題(含答案)
- 2024年人教版九年級英語單詞默寫單(微調(diào)版)
評論
0/150
提交評論