Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

contextlibをつかうと終了時や開始時に明示的なアクションが必要な場合に確実な記述ができる

contextlibはwith構文のyieldを使って色々できる怖い機能です。
with構文自体がcloseをやってくれる便利なヤツですが、
このcontextlibをつかうと終了時や開始時に明示的なアクションが必要な場合に確実な記述ができます。

実際のところ

公式のサンプルによると、たとえばHTMLタグ打ちなんかで使えるみたいですね。

from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

with tag("h1"):
  print("foo")

#>> <h1>
#>> foo
#>> </h1>

他の用法では、バッチ処理の前後に挟むようなアレコレを書くといった用法が考えつきます。