Python 上下文管理器与 with 语句

打工人 · 2020年12月07日 · 1012 次阅读

1、概念
上下文管理协议(Context Management Protocol):包含enter() 和exit() 方法,支持该协议的对象要实现这两个方法
上下文管理器(Context Manager):支持上下文管理协议的对象
使用 with 语句调用上下文管理器,来构建对资源的自动创建和释放
2、with 语句基本语法

with expression [as variable]:
    with-block

3、上下文管理器

class Context:

    def __enter__(self):
        print("enter方法")

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("exit方法")


with Context() as c:
    print(c)

执行原理如下:
1、执行 Context(),返回一个上下文管理器对象
2、自动调用上下文管理器的enter方法,如果使用了 as 子句,则将enter() 方法的返回值赋值给 as 子句中的 c
3、执行 with 中的代码块
4、不论执行过程中是否发生异常,都会执行上下文管理器中的exit() 方法,exit 方法负责清理工作。如果执行过程中没有异常,则以 None 作为参数调用exit
如果执行过程中发生了异常,则使用exit(exc_type, exc_val, exc_tb) 调用

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册