with、上下文管理器
with
with 一种上下文管理器
def m3():
with open("output.txt","r") as f:
f.write("python")
上下文管理器
- 任何实现了__enter__() 和__exit__()的对象都是上下文管理器
- 上文:正常进行的代码;下文:出现异常或结束/关闭的代码
- 上下文管理器可以用with关键字来保证文件可以关闭,是try/finally的替代方式
方法一:__enter__() 和__exit__()
上下文管理流程图:
方法二:contextlib模块:
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")
注:
- with开始执行
- yield处暂停执行,上文与下文之间暂停执行