Diciamo che avete:Vale la pena chiudere i file in piccole funzioni?
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
La mia prima domanda è: è la pena di avere la dichiarazione try/finally (o con)? Il file non si chiude comunque quando termina la funzione (tramite garbage collection)?
Ho trovato questo dopo aver letto la ricetta modulo "python libro di cucina" di Martelli, dove
all_the_text = open('thefile.txt').read()
arriva con il commento: "Quando si esegue questa operazione, non si ha più un riferimento all'oggetto di file non appena l'operazione di lettura termina, in pratica, Python nota la mancanza di un riferimento in una volta e chiude immediatamente il file ".
Il mio esempio di funzione è quasi lo stesso. Hai un riferimento, è solo che il riferimento ha una vita molto breve.
La mia seconda domanda è: cosa significa "immediatamente" nella dichiarazione di Martelli? Anche se non si ha alcun riferimento, la chiusura dei file non avviene comunque al momento della raccolta dei rifiuti?
Non direi che il tuo esempio è del tutto simile. Assegnate il file alla variabile 'fh' mentre' open ('thefile.txt'). Read() 'usa semplicemente' read' subito dopo il riferimento quando viene creato senza salvarlo. Penso che sia quello che intende per * immediatamente * – jamylak
possibile duplicato di [domanda descrittore python close file] (http://stackoverflow.com/questions/4599980/python-close-file-descriptor-question) – jamylak