[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语句

posted @ 2019-09-14 22:45  jawide  阅读(150)  评论(0编辑  收藏  举报