考虑下面的Python(2.x)代码:
for line in open('foo').readlines():
print line.rstrip()
我假设由于打开的文件仍然未被引用,因此必须自动关闭它。我已经阅读了有关Python中的垃圾收集器的信息,该垃圾收集器可释放未使用对象分配的内存。GC是否也足以处理文件?
取自文档(python 3.6):
如果未使用with关键字,则应调用f.close()关闭文件并立即释放文件使用的所有系统资源。如果您未明确关闭文件,
Python的垃圾回收器最终将破坏该对象并为您关闭打开的文件
,但该文件可能会保持打开状态一段时间。另一个风险是,不同的Python实现将在不同的时间进行清理。
因此,是的,文件将自动关闭,但是为了控制该过程,您应该自己关闭或使用以下with
语句:
with open('foo') as foo_file
for line in foo_file.readlines():
print line.rstrip()
foo_file``with
区块结束后将被固定
在python 2.7
docs中,措辞不同:
处理完文件后,调用f.close()将其关闭并释放打开文件占用的所有系统资源。调用f.close()之后,尝试使用文件对象将自动失败。
因此,我假设您不应该依赖垃圾收集器自动为您关闭文件,而只需手动/使用 with
考虑下面这段Python(2.x)代码: 我假设,由于打开的文件仍然未被引用,因此必须自动关闭。我读过Python中的垃圾收集器,它释放由未使用的对象分配的内存。GC是否也足够处理这些文件?
的JavaDoc没有说明关闭底层: https://docs.oracle.com/javase/8/docs/api/java/io/inputstreamreader.html#close-- 从类复制的描述:Reader 关闭流并释放与之关联的任何系统资源。一旦流关闭,进一步的read()、ready()、mark()、reset()或skip()调用将引发IOException。关闭以前关
JavaDoc for没有提到关闭底层的: https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close-- 从课堂上复制的描述:Reader 关闭流并释放与之关联的所有系统资源。流关闭后,进一步的read()、ready()、mark()、reset()或skip()调用将抛出IOException。
在写nodejs文件的时候发现,明明是js文件却有类型提示,甚至按住Ctrl点击也会跳转到对应的 .d.ts 声明文件,这是为什么呢? 项目目录 package.json 现象
defer 关键字(参看 6.4)对于在函数结束时关闭打开的文件非常有用,例如下面的代码片段: func data(name string) string { f, _ := os.OpenFile(name, os.O_RDONLY, 0) defer f.Close() // idiomatic Go code! contents, _ := ioutil.ReadAl
我正在用JPA和Hibernate做一些简单的测试,当我不希望的时候,我碰巧关闭了EntityManager。 这是我的测试主: DB助手: 实体和对应的DAO: 在商店里,当开始交易时,我得到以下信息: 未执行关机方法。为什么实体管理器关闭? 为了完整起见,以下是persistence.xml: