上下文管理器 contextlib
阿新 • • 發佈:2018-04-17
pytho self eat ini out spa col begin port
from contextlib import contextmanager @contextmanager def tag(name): print "<%s>" % name yield print "</%s>" % name >>> with tag("h1"): ... print ("foo") ... <h1> foo </h1>
編寫 __enter__ 和 __exit__ 仍然很繁瑣,因此Python的標準庫 contextlib 提供了更簡單的寫法
@contextmanager 這個裝飾器接受一個 generator,用 yield 語句把 with ... as var 把變量輸出出去,然後,with 語句就可以正常的工作了
from contextlib import contextmanager class Query(object): def __init__(self, name): self.name = name def query(self): print(‘Query info about %s...‘ % self.name) @contextmanager def create_query(name): print(‘Begin‘) q = Query(name) yield q print(‘End‘)
with create_query(‘Bob‘) as q: q.query()
上下文管理器 contextlib