什麼是上下文管理器?上下文管理器就是容許你能夠自動地開始和結束一些事情python
要實現with上下文管理器,須要對象實現enter()和exit()2個函數。markdown
class Closer: def __init__(self, obj): self.obj = obj def __enter__(self): return self.obj def __exit__(self): self.obj.close() # 前提是obj對象有close()方法 from ftplib import FTP with Closer(FTP('hostname')) as ftpconn: print(ftpconn.__dict__) # with語句退出時,會自動調用__exit__()方法。
利用contextlib建立一個上下文管理器ide
from contextlib import contextmanager @contextmanager def g(name): print(f'<{name}>') yield # 這行代碼表示__enter__()執行完畢,下面的代碼表示__exit__()執行的效果 print(f'</{name}>') with g('h1') as t: print(t) #yield返回爲None print('foo') ##output## None foo