Ответ 1
filename
будет закрыт, когда он выпадет из сферы действия. Обычно это будет конец метода.
Да, лучше использовать with
.
Как только у вас есть файловый объект, вы выполняете все операции ввода-вывода файлов, вызывая методы этого объекта. [...] Когда вы закончите с файлом, вы должны закончить, вызвав метод
close
объекта, чтобы закрыть соединение с файлом:input.close()
В коротких сценариях люди часто опускают этот шаг, так как Python автоматически закрывает файл, когда файл-объект регенерируется во время сбора мусора (который в основном Python означает, что файл закрыт примерно сразу, хотя другие важные реализации Python, такие как как Jython и IronPython, имеют другие, более расслабленные стратегии сбора мусора). Тем не менее, хорошая практика программирования заключается в том, чтобы как можно скорее закрыть ваши файлы, и это особенно хорошая идея в более крупных программах, которые в противном случае могут быть более подвержены риску чрезмерного количества бесполезно открытых файлов. Обратите внимание, что
try
/finally
особенно хорошо подходит для последующего закрытия файла, даже когда функция завершается из-за неперехваченного исключения.