2012-06-14 11 views

Respuesta

18

"Maybe".

En cPython, que utiliza refcounting, el archivo se cerrará tan pronto como finalice la comprensión de la lista (y se perderán todas las referencias al objeto file).

Pero el estándar Python no requiere que se cierre. Por ejemplo, el archivo no se cerrará inmediatamente en jython, que utiliza el recolector de elementos no utilizados de JVM.

El método "preferido" de asegurar que los recursos son correctamente cerrada es la with declaración:

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

Esto se garantía de que el archivo se cierran.

Y, como señala @astynax, es posible que pueda usar d = f.readlines() aquí, ya que tendría la misma semántica que la lista de comprensión.

Para probar esto a ti mismo (en 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] 
Cuestiones relacionadas