4

重複の可能性:
Python ファイル オブジェクトでイテレータを使用する場合、close() は必要ですか?

for line in open("processes.txt").readlines():
    doSomethingWith(line)

そのコードを例に取ります。close() を呼び出すものは何もありません。それで、それは自動的に閉じますか?

4

2 に答える 2

7

対応するオブジェクトの割り当てが解除されると、ファイルは閉じます。あなたが与えるサンプルはそれに依存します。オブジェクトへの参照がないため、オブジェクトが削除され、ファイルが閉じられます。

注意すべき重要な点は、オブジェクトがいつ削除されるかについては保証されていないということです。CPythonでは、メモリ管理の基礎として参照カウントがあるため、ファイルがすぐに閉じることが期待されます。たとえば、Jythonでは、ガベージコレクターが特定の時間に(またはまったく)実行されることが保証されていないため、ファイルが閉じられていることを期待せず、代わりに手動でファイルを閉じるか、(より適切に)withステートメントを使用する必要があります。 。

于 2012-12-06T06:31:19.377 に答える
5

私の知る限り、そうではありません。自動クローズを行うには、次のようなコンテキスト マネージャーを使用する必要があります。with

オブジェクト自体はガベージ コレクションによって再利用されて閉じられる場合がありますが、ガベージ コレクションが発生する明確な時間はありません。

with open("processes.txt") as openfile:
    <do stuff>
于 2012-12-06T05:45:32.170 に答える