在平时工作中总会有这样的任务,它们需要开始前做准备,然后做任务,然后收尾清理....比如读取文件,需要先打开,读取,关闭
这个时候就可以使用with简化代码,很方便
1.没有用with语句
1
2
3
|
f = open ( './test.txt' ) f.read() f.close() |
2.使用with语句
1
2
|
with open ( './test.txt' ) as f: f.read() |
with的工作原理是?
with 中包含 __enter__ 与 __exit__ 方法, 执行顺序是,在with下面语句未执行前,先执行__enter__方法,with下语句执行结束后,最后执行__exit__.
自定义一个上下文管理协议,看一下它的原理
1
2
3
4
5
6
7
8
9
10
11
12
|
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
1
|
<em id = "__mceDel" ><em id = "__mceDel" ><br><br>< / em>< / em> |
小雪 博客地址:https://home.cnblogs.com/u/snow-l/