PythonのWith...as文

1634 ワード

一、文法・・・1
with context as var:
    with_suite
  • with :tryの代わりに...except...finally文は、コードをより簡潔にします.
  • context:通常は式で、オブジェクトを返します.
  • var :contextが返すオブジェクトを保存するために使用され、単一の値またはメタグループであってもよい.
  • with_suite:変数varを用いてcontext戻りオブジェクトを各種操作するコードセグメント
  • .
    二、例
    #       
    XZ:learn xz$ cat with.txt 
    with...as...
    12345
    abcde
    
    In [2]: with open('with.txt','r+') as f:
       ...:     for line in f.readlines():
       ...:         print(line)
       ...: print('with is closed : ', f.closed)
       ...: 
       ...: 
    with...as...
    12345
    abcde
    with is closed :  True
    
  • テキストwith.txtfを開く変数は、ファイルオブジェクトが返すオブジェクトを受信する.
  • テキストの内容を読み取り、行ごとに印刷する.
  • withのコードの実行が完了すると、自動的にファイルが閉じます.
  • with文にtry...except異常処理がされていない場合、エラーが発生した場合、Python解釈器に直接異常を渡して投げ出し、自動的にファイルを閉じることはなく、try...except異常処理をした場合、異常が発生した場合、自動的にファイルを閉じてから異常を投げ出す. 

  • 三、原理
  • with文は実質的にコンテキスト管理
  • である.
  • コンテキスト管理プロトコル:__enter____exit__の2つの方法を含む.
  • は、このプロトコルをサポートするオブジェクトであり、with文によって操作されるには、この2つの方法を実装する必要があります.
  • コンテキストマネージャ
  • with文の実行時に確立された実行時コンテキストを定義し、with文コンテキストのアクセスと終了操作を実行する.
  • コンテキストマネージャに入る:マネージャ__enter__メソッドを呼び出し、as var文が設定されている場合、変数varは__enter__メソッドの戻り値を受け入れる.
  • コンテキストマネージャを終了:マネージャを呼び出す__exit__メソッド. 

  • 四、シーンの適用
  • ファイルアクション
  • プロセススレッド間の反発オブジェクト、例えば反発ロック
  • カスタムサポートコンテキストの他のアクション