読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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>

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