SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在平时工作中总会有这样的任务,它们需要开始前做准备,然后做任务,然后收尾清理....比如读取文件,需要先打开,读取,关闭

这个时候就可以使用with简化代码,很方便

1.没有用with语句

1 2 3 =  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/

 

   ,

在平时工作中总会有这样的任务,它们需要开始前做准备,然后做任务,然后收尾清理....比如读取文件,需要先打开,读取,关闭

这个时候就可以使用with简化代码,很方便

1.没有用with语句

1 2 3 =  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>
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄