从解释器看with语句执行流程
whit expression [as variable]:
with-block
-
as variable
可以省略 - 有一个句块需要执行
执行with语句时候,解释器先求出表达式的值,这个值是上下文管理器,拥有两个类魔术方法:
def __enter___():
# 描述进入上下文
pass
def __exit__():
# 描述退出上下文
pass
with 语句其实会先执行init 方法创建这个对象,创建完成后自动执行进入方法, 并将此对象赋值于as之后的变量,执行语句块,然后退出上下文之前自动执行退出方法。
参照文章
https://blog.csdn.net/lanhuazui10/article/details/120938353