Digamos que tienes:¿Vale la pena cerrar archivos en pequeñas funciones?
def my_func():
fh = open(...)
try:
print fh.read()
finally:
fh.close()
Mi primera pregunta es: ¿Vale la pena tener la sentencia try/finally (o con)? ¿No se cierra el archivo de todos modos cuando la función finaliza (a través de la recolección de basura)?
me encontré con esto después de leer una receta de forma "libro de cocina de Python" de Martelli, donde
all_the_text = open('thefile.txt').read()
viene con el comentario: "Cuando lo haga, ya no tiene una referencia al objeto de archivo tan pronto como sea la operación de lectura termina. En la práctica, Python nota la falta de una referencia a la vez e inmediatamente cierra el archivo ".
Mi ejemplo de función es casi el mismo. Usted tiene una referencia, es solo que la referencia tiene una vida muy corta.
Mi segunda pregunta es: ¿Qué significa "inmediatamente" en la declaración de Martelli? Aunque no tiene ninguna referencia, ¿no se produce el cierre del archivo en el momento de la recogida de basura?
No diría que su ejemplo es similar en absoluto. Está asignando el archivo a la variable 'fh' mientras' open ('thefile.txt'). Read() 'simplemente usa' read' directamente de la referencia cuando se crea sin guardarla. Creo que eso es lo que quiere decir con * inmediatamente * – jamylak
posible duplicado de [python cerrar pregunta del descriptor de archivo] (http://stackoverflow.com/questions/4599980/python-close-file-descriptor-question) – jamylak