Pythonコンテキストマネージャ

2906 ワード

Pythonコンテキストマネージャ
pythonコンテキストマネージャで最もよく使われるのはwith文です.
with open('./aaa.txt','w') as f:
        f.write('aaa')

次のように等価です.
f= open('./aaa.txt', 'w')
try:
    f.write('aaa')
finally:
    f.close()

多くのコードを節約するのに役立ちますが、すべての関数がwithを使用できるわけではありません.2つの方法があります.方法1は、クラス実装__enter____exit__の方法を定義します.2つ目の方法はジェネレータを使用します.
メソッド1カスタムクラスによるコンテキスト管理
次に例を示します.
class A:
        def __init__(self):
                print("init")
        def __enter__(self):
                print("enter")
                #    return with          
        def __exit__(self, typea , value, trance):#    True       
                print("exit")

with A():
        print('with')
'''   : init enter with exit      ,     ,     init  ,    enter,   with       ,   exit '''

定義ジェネレータコンテキスト管理の実装
from contextlib import contextmanager #        

@contextmanager #     
def gen():
    f = open('aaa.txt','w')
    yield f
    f.close()

with gen() as f:
    f.write("aaa")

自分で異常を処理する必要がある