Điều này thay vì ngược lại Bạn có thể sử dụng các hàm của trình tạo Python để làm gì? : trình tạo python, biểu thức trình tạo và itertools
mô-đun là một số tính năng yêu thích của tôi về python ngày nay. Chúng đặc biệt hữu ích khi thiết lập chuỗi hoạt động để thực hiện trên một đống dữ liệu lớn - tôi thường sử dụng chúng khi xử lý tệp DSV.
Vì vậy, khi nào không phải là thời điểm tốt để sử dụng máy phát điện, hoặc biểu thức trình tạo, hoặc một itertools
hàm?
- Khi nào tôi nên thích
zip()
hơnitertools.izip()
, hoặc range()
hếtxrange()
, hoặc[x for x in foo]
hết(x for x in foo)
?
Rõ ràng, cuối cùng chúng ta cần "giải quyết" một trình tạo thành dữ liệu thực tế, thường bằng cách tạo một danh sách hoặc lặp lại nó với một vòng lặp không phải trình tạo. Đôi khi chúng ta chỉ cần biết chiều dài. Đây không phải là điều tôi đang hỏi.
Chúng tôi sử dụng trình tạo để không gán danh sách mới vào bộ nhớ cho dữ liệu tạm thời. Điều này đặc biệt có ý nghĩa đối với các tập dữ liệu lớn. Nó cũng có ý nghĩa đối với các tập dữ liệu nhỏ? Có sự đánh đổi bộ nhớ / cpu đáng chú ý không?
Tôi đặc biệt quan tâm nếu ai đó đã thực hiện một số hồ sơ về điều này, dựa trên cuộc thảo luận mở rộng về hiệu suất hiểu danh sách so với map () và filter () . ( liên kết thay thế )
<5
ví dụ cụ thể của tôi nhanh hơn đối với các đoạn có độ dài lặp lại .