+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(105)

2019-09(108)

2019-10(20)

2019-11(10)

2019-12(10)

Daily学习笔记(一)

发布于2019-12-07 22:51     阅读(378)     评论(0)     点赞(12)     收藏(2)


1.https://www.cnblogs.com/flashBoxer/p/9664813.html

python中的__enter__ __exit__

上下文管理器是支持上下文管理器协议的对象,它为了with而生。

with语句开始运行时,会在上下文管理器对象上调用__enter__方法

               运行结束后,                                                  __exit__方法

  1. class Timer:
  2. def __init__(self, msg):
  3. self.msg = msg
  4. self.start_time = None
  5. def __enter__(self):
  6. self.start_time = time.time()#enter的时间
  7. def __exit__(self, exc_type, exc_value, exc_tb):
  8. print(self.msg % (time.time() - self.start_time))
  1. with Timer("Elapsed time in update: %f"):
  2. # Main training code

对文件的操作 

先前:

  1. try:
  2. f = open('filename')
  3. except:
  4. print("Unexpected error:", sys.exc_info()[0])
  5. else:
  6. print(f.readlines())
  7. f.close()

现在:

用with语句,代码更简洁,减少编码量,在执行完后自动关闭文件(即使出现异常也会)

  1. with open('example.info', 'r') as f:
  2. print(f.readlines())

例子:

  1. class TmpTest:
  2. def __init__(self,filename):
  3. self.filename=filename
  4. def __enter__(self):
  5. self.f = open(self.filename, 'r')
  6. return self.f#不能省略 否则报错
  7. def __exit__(self, exc_type, exc_val, exc_tb):
  8. self.f.close()
  9. test=TmpTest('file')
  10. with test as t:# t = __enter__的返回值
  11. print ('test result: {}'.format(t))

 



所属网站分类: 技术文章 > 博客

作者:爬虫soeary

链接: https://www.pythonheidong.com/blog/article/170251/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)