python 上下文管理器

python中实现了__enter____exit__方法的对象就可以称之为上下文管理器。

实现方法一
def File(object):
  def __init__(self, file_name, file_model):
    self.file_name = file_name
    self.file_model = file_model

  def __enter__(self):
    self.f =  open(self.file_name, self.model) 
    return self.f

  def __exit(self):
    self.f.close()

以上就实现了简单的上下文管理器。

使用方法:

  with File("1.tex", "r") as f:
    f.write("hello world")

以上代码实现起来更加简洁明了, 不用再调用close()关闭文件。

实现方法二

python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。通过 yield 将函数分割成两部分,yield 之前的语句在 __enter__ 方法中执行,yield 之后的语句在 __exit__ 方法中执行。紧跟在 yield 后面的值是函数的返回值。

from contextlib import contextmanager
@contextmanager
def file (file_name, file_model):
  f = open(file_name, file_model)
  yield f
  f.close()

以上也实现了上下文管理器,使用方法如下:

with file("2.tex") as f:
  f.write("hello world")

转载自:https://www.cnblogs.com/skaarl/p/9671945.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。