Pythonのcontextlibモジュール

このブログでは、コンテキストマネージャープロトコル(ステートメント付き)を定義する方法について説明しましたが、今日は、より簡単な定義方法について説明します。

python関数をコンテキストマネージャーに変えるcontextlibこと@contextlib.contextmanagerができるデコレーターを備えた組み込みモジュール提供します

import contextlib

@contextlib.contextmanager
def file_open(file_name): #此处只是模拟并没有真的打开一个文件
	print("file open")
	yield {
    
    } # 把函数变为生成器
	print("file end")

実際、yield上記のロジックは前のブログの__enter__関数(リソースの取得)のyieldロジックと同等であり、次のロジックはそのブログの__exit__関数(リソースの解放)と同等です。

yieldロジックは任意です。この関数はコンテキストマネージャーになります。

次に、withステートメントを使用します。

with file_open("bobby.txt") as f_open: #只是模拟,说明逻辑,没有真的文件
    print("file processing")
    
#输出为 
# file open
# file processing
# file end

実行するときは、最初に__enter__関数、つまりyield上記のコードprintを入力しfile open、次にprintを実行し、file processing最後に__exit__関数を入力します。つまり、yield次のコードprintを実行しますfile end

おすすめ

転載: blog.csdn.net/weixin_43901214/article/details/106954854