with‎和上‎下文‎管理器

来源:m-dot.com   作者:   发表时间:2020-02-12 09:17:03

如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句。

对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后,必须要做的事情就是关闭该资源。

在上篇文件中,我们读写文件操作,完毕之后,关闭文件对象。调用close方法,下面来看看如何正确的关闭一个文件。

这样写有一个误区,如果在调用write方法时,出现了异常无法继续执行下面代码,资源就被该程序一直占用系统资源。

上面的程序我们使用异常进行了捕获,finally内代码执行关闭资源。如果需要学习异常的使用,请看下篇文章。

简洁优雅的写法就是使用with关键字。with的作用和使用异常捕获try/finally语句是一样的。想了解with原理,我们必须知道上下文管理器。

任何实现了__enter__()和__exit__()方法的对象都可以称为上下文管理器,上下文管理器对象可以使用with关键字,文件对象也实现了上下文管理器。

自定义类实现上下文管理器,示例代码:

enter()方法返回资源对象,这就是要打开的文件对象,exit()方法处理清除工作。因为File类实现了上下文管理器,现在就可以使用with语句了。

这样一来,系统自动调用close方法实现关闭资源。

编辑:

未经授权许可,不得转载或镜像
© Copyright © 1997-2019 by m-dot.com all rights reserved