理解 Python 的上下文管理器
任何 Python 教程,必然会讲解如何打开一个文件。而任何提到打开文件的地方,都必然会推荐用 with 来操作文件的读写。比如说这里有一篇非常优秀的教程,文中提到 在 Python 中,文件读写是通过 open() 函数打开的文件对象完成的。使用 with 语句操作文件 IO 是个好习惯。 并且给出了详细的代码示例。但为什么 with 关键字能在结束这个 block 的时候自动调用 close() 呢?让我们去一探究竟。 知 首先来看一下 with 是怎么来的。 with 在提案 PEP 343 中首次被提出,其中有段对于 with 操作的详细说明。用下面的一小段代码来说明就是,要求 EXPR 的类实现了 __enter__ 和 __exit__ 方法。 with EXPR as VAR: BLOCK 进入 with 代码块之后,第一件事就是把 __enter__ 的返回值