[Python] with-as
先来一个简单的实例
with open('file.txt','w') as file: file.write('text')
执行分为四个步骤:打开文件->将返回值赋给file->执行读写->关闭文件
前三个步骤都能与相应的语句对应,但第四个步骤是哪里来的?
这要从with这个控制流语句的机制来说起
在解释机制之前,我们首先来了解一下读写文件的一系列操作
打开->读写->关闭
当然不止文件操作有着这样的步骤
在Python中还有很多与之相类似的操作
为了简化这些操作,Python使用了一个非常巧妙的方法
这个方法叫做“上下文管理协议”,“context mangement protocol”
在类中定义两个方法__enter__,_exit__用来实现隐性的进入和清除
执行with-as语句的等价try-finally语句的具体步骤:
try: expression __enter__() with_block finally: __exit__()
所以之前的实例中的第四个步骤其实就是__exit__方法
当然with-as语句有他自己的适用范围
只有类中具有__enter__,__exit__方法
这个类的实例才能用with-as语句