【python 超初心者向け】@contextlib.contextmanagerとは?

パソコン

こんにちは,ティロといいます.

他人のソースコードを読んでいる際に,関数の上に@contextlib.contextmanagerがあり,

「???」となったのでコンテキストマネージャについて説明します.

コンテキストマネージャってなに?

まずコンテキストマネージャとは__enter__メソッドと__exit__メソッドを持つクラス(インスタンス)のことです.

with文と組み合わせて使います.

サンプルコードを見てください.

with hogeで前処理として__enter__が呼ばれます.

with hoge内の処理が終わったら後処理として__exit__が実行されます.

_exit__の引数で渡される値は例外が発生した場合に役立ちます.

return Trueにすると例外が発生した場合においても最後まで処理されます.

デコレータは関数を修飾するもの

関数の上にある@contextlib.contextmanagerはコンテキストマネージャをシンプルにしたものです.

まず@〜〜はデコレータといいます.

デコレータとはざっくりいうと関数を修飾するものです.

デコレートしたい関数の上に@デコレータ名を書きます.

デコレータは最初の行で宣言してます.その際,デコレートされる関数(ここでは a)を引数にします.

inner内で処理を記述します.

デコレータの詳しい説明はこちら

Pythonのデコレータについて – Qiita

@contextlib.contextmanagerとは

@contextlib.contextmanagerはコンテキストマネージャのデコレータです.

サンプルコードのように__next__や__exit__を書く必要がありません.