二十二、「コンテキストマネージャ」と

そのようなファイル、データベース接続、ソケットなどで、これらのリソースを完了した後、アプリケーションを開いて、ビジネスロジックを実行するなどのシステムリソースが、それ以外の状況がリソースを占有され、リソース(オフ)閉じる必要があります。

開いているファイルの普通のバージョン:

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(" こんにちは、最も単純なコンテキストマネージャ"

 

おすすめ

転載: www.cnblogs.com/nuochengze/p/12666088.html