例如,我有以下代码:
d = [l for l in open('a.txt', 'r')]
Run Code Online (Sandbox Code Playgroud)
之后d被创建,将在列表理解拉开流都会自动关闭?
Dav*_*ver 18
"也许".
在使用引用计数的cPython中,文件将在列表推导完成后立即关闭(并且对该file对象的所有引用都将丢失).
但Python标准并不要求它被关闭.例如,文件不会立即在使用JVM垃圾收集器的jython中关闭.
确保资源正确关闭的"首选"方法是with声明:
with open(…) as f:
d = [l for l in f]
Run Code Online (Sandbox Code Playgroud)
这将保证文件关闭.
而且,正如@astynax指出的那样,你可以在d = f.readlines()这里使用,因为它具有与列表理解相同的语义.
为了证明这一点(在cpython中):
>>> class Foo(object): ... def __del__(self): ... print "in __del__" ... def __iter__(self): ... return iter([1, 2, 3, 4]) ... >>> [ x for x in Foo() ] in __del__ [1, 2, 3, 4]
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |