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