




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《Python開(kāi)發(fā)技術(shù)應(yīng)用》61上下文管理上下文管理器上下文管理器,是一個(gè)包裝其他代碼的對(duì)象,用于處理那些事先需要設(shè)置,事后需要做清理工作的事務(wù)。使用上下文管理器最多的場(chǎng)景是文件對(duì)象。在使用文件對(duì)象時(shí),最簡(jiǎn)陋的做法是這樣的:f=open("/tmp/test.txt")f.write('程序日志:測(cè)試1\n') #假設(shè)這就是要做的全部工作f.close()上下文管理器如果忘記調(diào)用file.close()方法,會(huì)存在兩個(gè)問(wèn)題:如果在程序運(yùn)行結(jié)束之前發(fā)生藍(lán)屏、斷電等情況,已經(jīng)寫入但暫未緩沖的數(shù)據(jù)會(huì)丟失。在程序運(yùn)行結(jié)束之前,打開(kāi)的文件會(huì)被占用,其他程序或用戶將無(wú)法修改、移動(dòng)或刪除這個(gè)文件。現(xiàn)在給這些代碼加上finally語(yǔ)句:f=open("/tmp/test.txt")try:f.write('程序日志:測(cè)試1\n') #假設(shè)這就是要做的全部工作finally:f.close()這段代碼可以改寫為:withopen("/tmp/foo.txt")asf:
f.write('程序日志:測(cè)試1\n')上下文管理器使用with語(yǔ)句打開(kāi)文件,把相關(guān)工作放在其下的語(yǔ)句塊中,當(dāng)語(yǔ)句塊結(jié)束的時(shí)候,會(huì)自動(dòng)完成清理工作,相當(dāng)于添加了一套finally子句。這就是上下文管理器。支持上下文管理的對(duì)象文件對(duì)象之所以能夠使用上下文管理器,是因?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('程序日志:測(cè)試1\n')#后續(xù)代碼...支持上下文管理的對(duì)象隱性調(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對(duì)象直接用減法運(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è)方法用于支持上下文管理器。支持上下文管理的對(duì)象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支持上下文管理的對(duì)象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對(duì)象相減,拋出ValueError異常
raiseTypeError("incorrectcoordinateparametertype")def__str__(self):returnf"Point({self.x},{self.y})"def__enter__(self):#此方法在進(jìn)入with語(yǔ)句時(shí)自動(dòng)調(diào)用
print(f'{self.y}進(jìn)入上下文管理器')
returnself#必須將當(dāng)前對(duì)象返回給上下文管理器
def__exit__(self,exc_type,exc_val,exc_tb):#此方法在離開(kāi)with語(yǔ)句時(shí)自動(dòng)調(diào)用
print(f'{self.y}離開(kāi)上下文管理器,完成清理工作')A=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量控制計(jì)劃表CP
- 12、新人培訓(xùn)教材接觸
- 貸房貸委托書范本
- 敬老院雙十一活動(dòng)策劃書
- 高級(jí)文秘工作簡(jiǎn)歷模板
- 會(huì)計(jì)信息系統(tǒng)應(yīng)用 (第二版)教案全套 鐘愛(ài)軍
- 農(nóng)民合作社土地承包經(jīng)營(yíng)權(quán)確權(quán)登記指南
- 三農(nóng)行業(yè)三農(nóng)村基層社區(qū)治理實(shí)踐指南
- 二零二五年辦公室防盜門定制與智能安防系統(tǒng)安裝合同
- 商務(wù)活動(dòng)策劃與執(zhí)行手冊(cè)
- 2025年企業(yè)資金授權(quán)管理協(xié)議范本
- 2024-2025學(xué)年山東省濟(jì)南市九年級(jí)(上)期末語(yǔ)文試卷(含答案)
- 鄧宗良《煤油燈》閱讀答案
- 2024年合理膳食教案
- 臨床檢驗(yàn)分子生物學(xué)發(fā)展
- 2025版年度城市綠化活動(dòng)策劃及實(shí)施服務(wù)合同范本
- 2025年全國(guó)高考體育單招政治時(shí)事填空練習(xí)50題(含答案)
- 人教版高中物理《圓周運(yùn)動(dòng)》
- 【課件】平行線的概念課件人教版(2024)+數(shù)學(xué)七年級(jí)下冊(cè)
- 勞務(wù)派遣服務(wù)方案(技術(shù)方案)
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論