python io流,Python io流会在列表理解中自动关闭吗?
For example I have the following code:
d = [l for l in open('a.txt', 'r')]
After d is created, will the stream opened in the list comprehension get closed automatically ?
解決方案
"Maybe".
In cPython, which uses refcounting, the file will be closed as soon as the list comprehension finishes (and all references to the file object are lost).
But the Python standard does not require that it be closed. For example, the file will not be closed immediately in jython, which uses the JVM garbage collector.
The "preferred" method of ensuring that resources are correctly closed is the with statement:
with open(…) as f:
d = [l for l in f]
This will guarantee that the file get closed.
And, as @astynax points out, you might be able to use d = f.readlines() here, as it would have the same semantics as the list comprehension.
To prove this to yourself (in 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]
總結
以上是生活随笔為你收集整理的python io流,Python io流会在列表理解中自动关闭吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总线制和多线制示意图_消防系统的总线制和
- 下一篇: 动圈耳机振膜_耳机中的动圈、动铁、圈铁都