2012-06-14 22 views

Trả lời

18

"Có thể".

Trong cPython, sử dụng tính năng đếm ngược, tệp sẽ bị đóng ngay khi danh sách đọc xong (và tất cả các tham chiếu đến đối tượng file đều bị mất).

Nhưng tiêu chuẩn Python không yêu cầu rằng nó sẽ bị đóng. Ví dụ, tập tin sẽ không được đóng ngay lập tức trong jython, trong đó sử dụng bộ thu gom rác JVM.

Phương pháp "ưa thích" đảm bảo rằng các nguồn lực là đúng khép kín là with tuyên bố:

with open(…) as f: 
    d = [l for l in f] 

này sẽ đảm bảo rằng các tập tin được đóng lại.

Và, như @astynax chỉ ra, bạn có thể sử dụng d = f.readlines() tại đây, vì nó sẽ có cùng ngữ nghĩa như danh sách hiểu.

Để chứng minh điều này cho chính mình (trong 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] 
Các vấn đề liên quan