在平时工作中总会有这样的任务,它们需要开始前做准备,然后做任务,然后收尾清理....比如读取文件,需要先打开,读取,关闭
这个时候就可以使用with简化代码,很方便
1.没有用with语句
f = open ('./test.txt') f.read() f.close()
2.使用with语句
with open('./test.txt') as f: f.read()
with的工作原理是?
with 中包含 __enter__ 与 __exit__ 方法, 执行顺序是,在with下面语句未执行前,先执行__enter__方法,with下语句执行结束后,最后执行__exit__.
自定义一个上下文管理协议,看一下它的原理
class Context(): def __enter__(self): print('start') return self def __exit__(self,*unused): print('over') def dosomething(self): print('dosomething') with Context() as ctx: ctx.dosomething()
打印结果
start
dosomething
over