上下文管理器 contextlib

Posted Erick - LONG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上下文管理器 contextlib相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Python 上下文管理器模块--contextlib

Python:contextlib模块——上下文管理器工具

上下文管理器 contextlib

python的上下文管理(contextlib)

python上下文管理器ContextLib及with语句

一分钟了解contextlib模块