with ...as ...

1385 ワード

これは比較的よく理解できる使い方です. 
 
いくつかのタスクがあり、事前に設定し、後で整理作業をする必要があるかもしれません.このようなシーンでは、Pythonのwith文は非常に便利な処理方法を提供しています.
良い例はファイル処理です.ファイルハンドルを取得し、ファイルからデータを読み出し、ファイルハンドルを閉じる必要があります.
with-as式はfinallyを書くたびに仕事を大幅に簡略化した.
 
ファイルの操作に用いることが最も多く、以下の非常に簡潔な方法で書くことができる.重要なのは、いつfcloseの問題を考える必要はありません. 
with open("/tmp/foo.txt") as file:
    data = file.read()

コードの優雅さの背後には何かをしているに違いない.この例では、表面的には見えない玄機ですが、openファイルの場合、enterやfinallyのような作業が完了しています. 
実際の2つの関数は__ですenter__ ,  __exit__ .
実際の実行中にpythonが最初に実行されます_enter__のコードはselfを返し、asの後ろの変数値として、
次にwithモジュールのコードを実行し、withのコードの実行結果にかかわらずexitのコードを自動的に実行します.
これがwithがtry-finally文を簡略化できる理由です.
したがってwithは通常、ファイルを読み込む操作で使用され、ファイルハンドルの閉じる操作をexitメソッドに配置することで、ファイルハンドルの解放を忘れてエラーが発生する可能性がありません.
さらに、exit()メソッドの戻り値は、with部分のコードに発生する異常がraiseを必要とするかどうかを示すために使用でき、falseを返すとraiseが発生し、そうでなければ、何の操作も行わない.
 
もう一つ注意すべき点はwith...as ... : その後の関数は、属する周辺オブジェクトであり、withに続く関数とは必然的な関係はない.
 
参照先:
http://blog.kissdata.com/2014/05/23/python-with.html
http://effbot.org/zone/python-with-statement.htm
http://www.cnblogs.com/Brogrammer/archive/2012/07/23/2605570.html
転載先:https://www.cnblogs.com/qingyuanjushi/p/5985551.html