python上下文管理
什么是上下文管理
python中进行文件操作,经常被建议使用with open
的方式,形如:
with open('./dec.py', 'r') as f:
for line in f.readlines():
print(line)
why? 这背后的原因是什么?
直观的解释是:这样的好处文件操作是io操作,操作完成之后,需要关闭close,避免文件一直被占用打开。
与之对比另一种写法是:
f = open('./dec.py', 'r')
for line in f.readlines():
print(line)
f.close()
两种写法对比可以知道:with 方式隐式的帮我们做了资源的释放操作,而这个可能是我们可能遗忘的。
那with是什么?有没有其他的作用?就是今天的主题。
with 上下文管理
with是一种python上下文管理方式;什么是上下文(context)
- context是指程序运行所处于的环境和自身的状态(如数据)
- 比如上面提到的文件操作,包含了文件打开获取文件操作的句柄权限(获得资源)、处理文件信息、关闭文件(释放资源);这些都是可以认为是文件的操作的环境和状态,也就是一个上下文(context上下文这个译文有点怪怪,可以理解成一个容器内操作一个过程)
所以with上下文管理就是用在某种资源的创建,使用和回收以及异常处理过程中。语法结构如下:
with context_expression [as target(s)]:
with-body
结合文件操作来说: