这篇文章主要介绍了python 上下文管理器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Python 提供了 with 语法用于简化资源操作的后续清除操作,是 try/finally 的替代方法,实现原理建立在上下文管理器之上。
Python 提供了一个 contextmanager 装饰器,更进一步简化上下管理器的实现方式。
上下文管理器是Python2.5之后才出现的概念。上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,都会有相应的一些调用,比如代码块开始时执行一些准备,代码块结束时结束一些操作。它更多的是用于资源的分配和释放上,即在开始时分配资源,结束时释放一些资源。比如在执行数据库查询时要建立连接,查询结束后要释放连接;写文件时要先打开文件,写结束后,要关闭文件等等。还有,就是资源的加锁和解锁,比如在使用多线程时,可能会用到加锁和解锁。
上下文管理器可以通过使用更可读、更精简的代码实现资源的分配与释放。
复制代码
with的使用
对于上下文管理器的使用,最常见的是使用with语句,with语句可构建资源的分配与释放的语法糖。
因为with语句就是为支持上下文管理器而存在的,使用上下文管理协议的方法包裹一个代码块(with语句体)的执行,并为try...except...finally提供了一个方便使用的封装。
一般语法:
def load_data(filename): f = file(filename,'w') try: f.write('test file') finally: f.close()
使用with:
# 使用with with open('test.txt', 'w') as f: f.write('Python')
通过 with 语句在编写代码时,会使代码变得更加简洁,不用再去关闭文件。
我们并不需要写文件的关闭操作,文件会在使用完后自动关闭。
with的执行原理
实际上,在文件操作时,并不是不需要写文件的关闭,而是文件的关闭操作在 with 的上下文管理器中的协议方法里已经写好了。当文件操作执行完成后, with语句会自动调用上下文管理器里的关闭语句来关闭文件资源。
上下文管理协议(context management protocol)
ContextManager ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的前后环境。
上下文管理器中有 __enter__ 和 __exit__ 两个方法,以with为例子,__enter__ 方法会在执行 with 后面的语句时执行,一般用来处理操作前的内容。比如一些创建对象,初始化等;__exit__ 方法会在 with 内的代码执行完毕后执行,一般用来处理一些善后收尾工作,比如文件的关闭,数据库的关闭等。
上下文管理协议包括两个方法:
![]() |
曾刚:消费金融未来监管或出现这几大 |
放眼国际,全球金融科技创新正如火如荼,新技术重塑着金融产业全流程。以人工智能、区块链、云计算、大数据为代表的核 |
![]() |
2017⇆2019三年寒冬 第三方支付行业之变 |
中国的钱包制造商,太难了。 有着中国缝制设备制造之都美誉的浙江台州,如今已经找不到专门生产钱包的企业了。 要知道 |
![]() |
行业诞生以来最大“地震”!大数据倒 |
一场大数据行业诞生以来最大规模的地震正在发生。 2019年9月6日,第三方数据风控公司魔蝎数据和新颜科技的相关负责人在 |
![]() |
“蹊跷”的银行财报:资本充足率飙升 |
日前,中国债券信息网披露了黄石农村商业银行股份有限公司(下称黄石农商行)2019年三季度信息报告(下称三季报)。 三 |
![]() |
被诈骗+背债!凭什么不让我们起诉支付 |
本文呦呦鹿鸣一位读者的遭遇,这件事从未披露过,他写了下来,供诸君参考。我很欣赏年轻的朋友们这样认真对待自己权利 |
![]() |
建行贵州分行被罚50万:“e信通”信贷资 |
12月3日,贵州银保监局公布行政处罚信息公开表(银保监银罚决字〔2019〕17号),中国建设银行股份有限公司(以下称建设银 |
![]() |
水滴筹创始人:再管不好 愿把公司交给 |
12月5日晚,水滴筹创始人兼CEO沈鹏在微博上发布公开信《水滴筹欢迎大众的监督,希望重新赢得信任》,并表示再管不好,我 |
![]() |
山东证监局原局长徐铁被开除党籍:曾 |
12月6日,据中央纪委国家监委网站消息,日前,中央纪委国家监委驻中国证监会纪检监察组、山东省监委对中国证券监督管理 |
![]() |
助贷业务的运作模式、潜在风险及监管 |
编者语: 助贷业务存在客户支持、资金支持和风控支持三种基本模式,其发展建立在比较优势理论和金融功能理论的基础上 |
![]() |
太悲情!内幕交易亏损超百万 还被罚 |
证监会日前通报了一桩利用内幕交易炒股的案件。在ST天业历时一年多,耗资18亿元的跨国并购案的背后,违法当事人斥资千 |
![]() |
曾刚:消费金融未来监管或出现这几大 |
放眼国际,全球金融科技创新正如火如荼,新技术重塑着金融产业全流程。以人工智能、区块链、云计算、大数据为代表的核 |
![]() |
2017⇆2019三年寒冬 第三方支付行业之变 |
中国的钱包制造商,太难了。 有着中国缝制设备制造之都美誉的浙江台州,如今已经找不到专门生产钱包的企业了。 要知道 |
![]() |
行业诞生以来最大“地震”!大数据倒 |
一场大数据行业诞生以来最大规模的地震正在发生。 2019年9月6日,第三方数据风控公司魔蝎数据和新颜科技的相关负责人在 |
![]() |
“蹊跷”的银行财报:资本充足率飙升 |
日前,中国债券信息网披露了黄石农村商业银行股份有限公司(下称黄石农商行)2019年三季度信息报告(下称三季报)。 三 |
![]() |
被诈骗+背债!凭什么不让我们起诉支付 |
本文呦呦鹿鸣一位读者的遭遇,这件事从未披露过,他写了下来,供诸君参考。我很欣赏年轻的朋友们这样认真对待自己权利 |
![]() |
建行贵州分行被罚50万:“e信通”信贷资 |
12月3日,贵州银保监局公布行政处罚信息公开表(银保监银罚决字〔2019〕17号),中国建设银行股份有限公司(以下称建设银 |
![]() |
水滴筹创始人:再管不好 愿把公司交给 |
12月5日晚,水滴筹创始人兼CEO沈鹏在微博上发布公开信《水滴筹欢迎大众的监督,希望重新赢得信任》,并表示再管不好,我 |
![]() |
山东证监局原局长徐铁被开除党籍:曾 |
12月6日,据中央纪委国家监委网站消息,日前,中央纪委国家监委驻中国证监会纪检监察组、山东省监委对中国证券监督管理 |
![]() |
助贷业务的运作模式、潜在风险及监管 |
编者语: 助贷业务存在客户支持、资金支持和风控支持三种基本模式,其发展建立在比较优势理论和金融功能理论的基础上 |
![]() |
太悲情!内幕交易亏损超百万 还被罚 |
证监会日前通报了一桩利用内幕交易炒股的案件。在ST天业历时一年多,耗资18亿元的跨国并购案的背后,违法当事人斥资千 |