2012-06-14 12 views

答えて

18

"多分"。

refcountingを使用するcPythonでは、リスト内包が終了するとすぐにファイルが閉じられます(fileオブジェクトへのすべての参照が失われます)。

しかし、Python標準ではにはが必要です。たとえば、JVMガベージコレクタを使用するjythonでは、ファイルはすぐに閉じられません。この保証ファイルが閉じてしまいますことを

with open(…) as f: 
    d = [l for l in f] 

リソースが正しく閉じていることを保証する「好ましい」方法はwith文です。

@astynaxが指摘しているように、ここではd = f.readlines()を使用することができます。これは、リストの理解と同じセマンティクスを持つためです。 (CPythonの中で)自分自身にこれを証明するために

 
>>> class Foo(object): 
...  def __del__(self): 
...   print "in __del__" 
...  def __iter__(self): 
...   return iter([1, 2, 3, 4]) 
... 
>>> [ x for x in Foo() ] 
in __del__ 
[1, 2, 3, 4] 
関連する問題