大家好,我们知道在代码的执行过程中会进行频繁的I/O操作,但是实际上资源是有限的,那么就要求我们注意资源方面的管理,I/O操作结束后,保证使用过的资源能够及时得到释放,防止发生资源泄露。在Python中我们经常使用with关键字跟上下文管理器结合使用,可以进行自动分配并且释放资源,今天我们来看一下with的应用。
Python中我们见到with最多的地方就是读写文件的操作,当然我们知道,这种应用只在Python3中使用,Python2中不存在with关键字。如果不使用with关键字,读写文件我们的写法如下:
但是这种写法风险很大,如果文件读写的过程中出现网络波动等其他差错,会导致资源无法释放。
有人说可以使用try.....exception...来弥补这个缺陷,确实,这是可以的,但是那得写多行代码才能完成,无论是代码执行效率还是代码冗余度都不是我们想要的。我们使用with语句就可以轻松实现。
上下文管理器原理:
一般我们用类来创建上下文管理器,保证这个类必须包括两个魔术方法:__enter__()和__exit__(),__enter__()这个方法返回需要被管理的资源,__exit__()这个方法进行资源释放和清理的操作。下面我们以文件读写来看其原理:
执行结果:
根据执行结果我们可以知道执行顺序是:初始化=》__enter__()打开文件=》with语句中的执行代码=》__exit__()关闭文件,并且可以看到关闭状态是成功的。
结语:with语句和上下文管理器的结合使用,大大提高了程序代码的简洁性,同时对于资源的管理起到了非常重要的作用。