假设我们想要实现一个与PHP的^{}等价的程序。
什么是最佳实践?(优雅可靠)
这里有一些建议,对吗?
使用with
语句:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
使用标准open()
是否安全?
def file_get_contents(filename):
return open(filename).read()
两种解决方案中的文件描述符都会发生什么变化?
Tags:
使用with语句实际上是确保文件真正关闭的最好方法。
取决于此任务的垃圾回收器行为可能会起作用,但在这种情况下,有一种很好的方法可以确保在所有情况下,所以。。。
在当前的CPython实现中,两者通常都会立即关闭文件。然而,Python语言并不能保证第二个文件最终会关闭,但最终的敲定者可能要等到下一个gc周期才会被调用。像Jython和IronPython这样的实现将像这样工作,所以最好明确地关闭文件。
我想说,使用第一个解决方案是最佳实践,尽管
open
通常比file
更受欢迎。请注意,如果您希望第二个示例的简洁性,可以稍微缩短一点:上下文管理器的
__exit__
部分将在您将主体留给任何原因时执行,包括异常和从函数返回-不需要使用中间变量。在这种情况下,如果文件不存在,它将返回None,并且在我们退出函数之前,文件描述符将被关闭。
相关问题 更多 >
编程相关推荐