そのようなファイル、データベース接続、ソケットなどで、これらのリソースを完了した後、アプリケーションを開いて、ビジネスロジックを実行するなどのシステムリソースが、それ以外の状況がリソースを占有され、リソース(オフ)閉じる必要があります。
開いているファイルの普通のバージョン:
fは(オープン= " output.txtとを"、" wが" ) f.write(" パイソン之禅" ) f.close()を
ファイルを開くには、以外の方法を試して使用します。
F =オープン(" output.txtと"、" W " ) の試行: f.write(" パイソン之禅" ) を除く例外IOError: プリント(" おっとエラー" ) 最後に: f.close()
開いているドキュメントを使用しました:
オープン(と" output.txtと"、" R " :Fなど) f.write(" パイソン之禅")
システムが自動的にf.close()効果を利用した方法、および試みを呼び出すと、戻り値が離れたときに、コードブロック、変数オープン方法Fに割り当てられている/ finally文は同じです。
コンテキストマネージャ
任意実装__enter __()と__exit __()メソッドは、コンテキストオブジェクト・マネージャと呼ぶことができます。
クラスファイル(): デフ __init__ (自己、ファイル名、モード): self.filename = ファイル名 self.mode = モード デフ __enter__ (自己): 印刷(" 入力" ) self.f = オープン(self.filename、self.mode ) を返すself.f デフ __exit__(自己、* 引数): プリント(" 終了します" ) self.f.closeを()
__enter __()メソッドが返すオブジェクトのリソースは、ここにあなたがファイルオブジェクトいくつかのクリーンアップ作業に対処するため、__終了__()メソッドを開くことになるでしょうものです。Fileクラスは、コンテキストマネージャを実装しているので、あなたは今のステートメントで使用することができます。
(ファイルと' out.txtを'、' W ' Fなど): プリント(" 書き込み" ) f.write(' こんにちは、パイソン')
これは、例外の真ん中がcloseメソッドが呼び出されます発生した場合でも、システムによって自動的に呼び出すために、ディスプレイにcloseメソッドを呼び出す必要がなくなります。
コンテキストマネージャを達成するための別の方法
Contextmanager Pythonはまた、コンテキストマネージャの実装を簡素化し、デコレータを提供します。ステートメントでは、2つの部分に分割することにより収率機能は__enter__収率法、実行__exit__歩留まり後の文の前に実行されます。降伏値は、関数の戻り値である直後
contextlib インポートcontextmanager @contextmanager DEF my_open(パスモード): F = オープン(パスモード) 収率F f.close()
コール
my_open(と' out.txtを'、' W ' :Fなど) f.write(" こんにちは、最も単純なコンテキストマネージャ")