2012-06-14 9 views

risposta

18

"Forse".

In cPython, che utilizza il conteggio dei conti, il file verrà chiuso non appena terminata la comprensione dell'elenco (e tutti i riferimenti all'oggetto file vengono persi).

ma lo standard di Python non richiede che sia chiuso. Ad esempio, il file non verrà chiuso immediatamente in jython, che utilizza il garbage collector JVM.

Il metodo "preferito" di garantire che le risorse siano correttamente chiuse è la dichiarazione with:

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

Questo sarà garanzia che il file ottenere chiuso.

E, come sottolinea @astynax, potresti essere in grado di utilizzare d = f.readlines() qui, poiché avrebbe la stessa semantica della comprensione di lista.

Per dimostrare questo a te stesso (in 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] 
Problemi correlati