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”)