2017-06-22 9 views
1

私は少しの概念的な問題があります。ファイルを開くために変数が必要な理由

out_file = open(to_file, 'w') 
out_file.write(indata) 

を...しかし、これはしていません:ファイル "to_file" への書き込みについては、これは動作します

(open(to_file, 'w')).write(indata) 

は理論的には、のために、変数の(out_fileパラ)の定義をスワップアウトするべきではありません変数自体が同じ結果を生成しますか?変数を作成する余分な手順が必要な理由について私は混乱しています。

+2

なぜ、他のケースが機能しないと思いますか?それが欠落している変数ではないと言わないでください。 –

答えて

3

他の人が指摘しているように、コードは実際に開いてファイルに書き込みます。ただし、...

2行目のコードでは、開いているファイルへの参照がなくなりました。したがって、あなたはそれを閉じたり、他の何かをする方法がありません。

ファイルを開いたままにするとリソースがリークします。あなたのプログラムがすぐに終了すると、Pythonは終了する直前にファイルを閉じようとします。しかし、Pythonはさまざまな理由で失敗する可能性があります。たとえば、ファイルを含むリムーバブルディスクドライブは、ファイルに書き込んだ後、プログラムが終了する前に削除されることがあります。これは、リムーバブルドライブでファイルを読むことができなくなる可能性があります。あなたのプログラムがすぐに終了しない場合、メモリや他のリソースを必要としない余分なリソースが必要です。プログラムが長時間続くと、リソースが増えてコンピュータが減速または停止する可能性があります。

あなたのプログラムがすぐに終了しても、開発するのは習慣の悪いことです。プログラムを書くだけではなく、さまざまな状況でうまく動作するコードを記述したいと考えています。 「長時間実行しているプログラムではこのコードを使用しません」と思うかもしれません。そのような宣言は誤っていることがよくあります。コーディングは十分に難しいです。自分ではそれを困難にしないでください。 2番目の例の「アンチパターン」を避けてください。

このようなことのためにPythonには、より良いパターンがあります。using the with statement。そのリンクを読んで、あなたの2つの例のどちらかではなく、そのパターンを使用してください。

これらの2行でファイルを開き、データをファイルに書き込んだ後、ファイルを閉じました。閉じられる前にファイルをさらに処理したい場合は、そのコードをインデントされたセクションのwithステートメントの下に置きます。

0

Python 2.7では、提供されている両方の例が動作し、ファイルに書き込まれます。

関連する問題