python 上下文管理器和contextmanager

什麼是上下文管理器?上下文管理器就是容許你能夠自動地開始和結束一些事情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
相關文章
相關標籤/搜索