Pythonコンテキストマネージャ
2906 ワード
Pythonコンテキストマネージャ
pythonコンテキストマネージャで最もよく使われるのはwith文です.
次のように等価です.
多くのコードを節約するのに役立ちますが、すべての関数がwithを使用できるわけではありません.2つの方法があります.方法1は、クラス実装
メソッド1カスタムクラスによるコンテキスト管理
次に例を示します.
定義ジェネレータコンテキスト管理の実装
自分で異常を処理する必要がある
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")
自分で異常を処理する必要がある