Tôi đã viết một dòng mã sử dụng lambda để đóng một danh sách các đối tượng tập tin trong python2.6:Không thể đóng tệp theo cách chức năng trong python3.1?
map(lambda f: f.close(), files)
Nó hoạt động, nhưng không ở python3.1. Tại sao?
Đây là mã của tôi kiểm tra:
import sys
files = [sys.stdin, sys.stderr]
for f in files: print(f.closed) # False in 2.6 & 3.1
map(lambda o : o.close(), files)
for f in files: print(f.closed) # True in 2.6 but False in 3.1
for f in files: f.close()
for f in files: print(f.closed) # True in 2.6 & 3.1
Cũng lưu ý rằng 2to3 bắt được điều này và sẽ tự động liệt kê (...) cuộc gọi bản đồ cho bạn, buộc đánh giá ngay lập tức. –
'Không bao giờ áp dụng các chức năng "chức năng" hoặc bản đồ tương tự cho các chức năng có tác dụng phụ. Python không phải là một ngôn ngữ chức năng, và sẽ không bao giờ được. ' Tôi không hiểu tại sao điều này không phải là lời khuyên âm thanh ngay cả khi python là một ngôn ngữ chức năng. Chỉ đơn giản là không có điểm trong việc sử dụng bản đồ nếu bạn không sử dụng kết quả - bằng bất kỳ ngôn ngữ nào. – sepp2k
Trong các hàm ngôn ngữ thuần túy chức năng không có tác dụng phụ, do đó, một hàm 'close()' không thể tồn tại. – Philipp