Python contextlib模塊使用示例
看這個(gè)模塊要先看with as的用法,最常用的方法就是打開(kāi)一個(gè)文件:
with open(“filename”) as f:
f.read()
with可以調(diào)用一個(gè)上下文管理器,產(chǎn)生運(yùn)行時(shí)的上下文環(huán)境。上下文管理器主要定義兩個(gè)方法,__enter__,__exit__。__enter__返回上下文里操作的對(duì)象,如f。__exit__是銷(xiāo)毀對(duì)象和異常處理。
contextlib模塊對(duì)外有三個(gè)接口,
contextmanager裝飾器,裝飾的函數(shù)必須是一個(gè)生成器。然后返回一個(gè)函數(shù),在函數(shù)調(diào)用的時(shí)候返回一個(gè)上下文管理器。
nested為了一次調(diào)用多個(gè)上下文管理器的時(shí)候用,將所有上下文管理器里的__enter__放到vars里,一次yield返回,然后unpack。就產(chǎn)生多個(gè)對(duì)象了。__exit__都放到exits列表里,在finally里統(tǒng)一調(diào)用,這些__exit__在調(diào)用上下文管理器產(chǎn)生異常時(shí),如何處理。如果返回false,將會(huì)把異常繼續(xù)拋出,返回true則不會(huì)拋出異常。
closing,這個(gè)用過(guò),沒(méi)想到的是竟然是個(gè)類(lèi),而不是個(gè)函數(shù)。就是把有close方法卻沒(méi)有__exit__方法的對(duì)象變成一個(gè)上下文管理器。代碼很簡(jiǎn)單:
class closing(object):
def __init__(self, thing):
self.thing = thing
def __enter__(self):
return self.thing
def __exit__(self, *exc_info):
self.thing.close()
相關(guān)文章
python中pandas對(duì)多列進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn)
分組統(tǒng)計(jì)在很多時(shí)候都需要用到,可以實(shí)現(xiàn)很多數(shù)據(jù)庫(kù)函數(shù)的功能。本文主要介紹了python中pandas對(duì)多列進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn),感興趣的可以了解一下2021-06-06
使用Python創(chuàng)建一個(gè)隨機(jī)密碼生成器
密碼安全是當(dāng)前數(shù)字時(shí)代的一個(gè)重要議題,在保護(hù)個(gè)人信息和賬戶(hù)安全方面,安全且可靠的密碼是至關(guān)重要的,本文將帶您逐步了解如何使用Python創(chuàng)建一個(gè)隨機(jī)密碼生成器,以生成高強(qiáng)度、難以猜測(cè)的密碼,需要的朋友可以參考下2024-01-01
基于jupyter代碼無(wú)法在pycharm中運(yùn)行的解決方法
這篇文章主要介紹了基于jupyter代碼無(wú)法在pycharm中運(yùn)行的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
使用Python 統(tǒng)計(jì)文件夾內(nèi)所有pdf頁(yè)數(shù)的小工具
這篇文章主要介紹了Python 統(tǒng)計(jì)文件夾內(nèi)所有pdf頁(yè)數(shù)的小工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Python3.8 + Tkinter: Button設(shè)置image屬性不顯示的問(wèn)題及解決方法
這篇文章主要介紹了Python3.8 + Tkinter: Button設(shè)置image屬性不顯示的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Django用戶(hù)注冊(cè)并自動(dòng)關(guān)聯(lián)到某數(shù)據(jù)表?xiàng)l目的實(shí)現(xiàn)步驟
當(dāng)一個(gè)新用戶(hù)注冊(cè)并且你想要自動(dòng)關(guān)聯(lián)到特定的Box條目(假設(shè)其ID為1)時(shí),下面給大家分享完整實(shí)現(xiàn)流程和步驟,對(duì)Django關(guān)聯(lián)數(shù)據(jù)表?xiàng)l目實(shí)現(xiàn)代碼感興趣的朋友跟隨小編一起看看吧2017-04-04
基于Python實(shí)現(xiàn)web網(wǎng)頁(yè)內(nèi)容爬取的方法
在日常學(xué)習(xí)和工作中,我們經(jīng)常會(huì)遇到需要爬取網(wǎng)頁(yè)內(nèi)容的需求,今天就如何基于Python實(shí)現(xiàn)web網(wǎng)頁(yè)內(nèi)容爬取進(jìn)行講解,感興趣的朋友一起看看吧2024-12-12

