Python——自定义上下文管理器的三种方式

本文介绍了Python中使用with语句管理资源的方法,包括如何自定义上下文管理器。通过实现__enter__和__exit__方法创建上下文管理器,使用contextlib模块的contextmanager装饰器简化该过程,以及利用closing对象作为上下文管理器。文章还给出了相关代码示例。
摘要由CSDN通过智能技术生成

with语句

在python2.6之前,需要使用try/finally来处理异常时的资源的正确关闭,方式如下:

try:
    f=open('/Users/admin/Desktop/test.txt','r')
    print(f.read())
except IOError as e:
    print('error')
finally:
    f.close()

而with语句可以更优雅简洁的实现资源的管理,语法结构如下:

with expression [as var]:
	// with-block

使用with语句代替try/finally:

with open('/Users/admin/Desktop/test.txt','r') as f:
	print(f.read())

这样就不需要代码层面上显式的f.close()资源了。
with后的expression是一个上下文管理器,只有正确实现了上下文管理才可以使用with语句。
上下文管理器需要通过实现__enter__和__exit__两个函数来完成,with语句执行过程:

  1. 生成上下文管理器expression
  2. 执行expression的__enter__(),并将返回的变量赋值给[as var]中的var
  3. 执行with-block代码块
  4. 执行expression的__exit__(),进行资源清理工作

上下文管理器

我们先通过上述方法来自定义一个上下文管理器:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值