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