with

本文最后更新于:2023年12月5日 晚上

上下文管理器

任何实现了 enter() 和 exit() 方法的对象都可称之为上下文管理器 ,上下文管理器对象可以使用 with 关键字, 显然, 文件(file)对象也实现了上下文管理器。

Python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。通过 yield 将函数分割成两部分,yield 之前的语句在 enter 方法中执行,yield 之后的语句在 exit 方法中执行。紧跟在 yield 后面的值是函数的返回值。

from contextlib import contextmanager

@contextmanager
def my_open(path, mode):
    f = open(path, mode)
    yield f
    f.close()

调用:

with my_open('out.txt', 'w') as f:
    f.write("hello , the simplest context manager")

总结

Python 提供了 with 语法用于简化资源操作的后续清除操作,是 try/finally 的替代方法,实现原理建立在上下文管理器之上。此外,Python 还提供了一个 contextmanager 装饰器,更进一步简化上下管理器的实现方式。


with
http://blog.lujinkai.cn/Python/基础/with/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议