Python:with-as

Posted jawide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句

以上是关于Python:with-as的主要内容,如果未能解决你的问题,请参考以下文章