Vì vậy, tôi đã xem bài nói chuyện của Raymond Hettinger Transforming Code into Beautiful, Idiomatic Python và anh ấy trả về hình thức iter
mà tôi chưa bao giờ biết. Ví dụ của mình là như sau:Các công dụng của iter (callable, sentinel) là gì?
Thay vì:
blocks = []
while True:
block = f.read(32)
if block == '':
break
blocks.append(block)
Sử dụng:
blocks = []
read_block = partial(f.read, 32)
for block in iter(read_block, ''):
blocks.append(block)
sau khi kiểm tra documentation của iter
, tôi tìm thấy một ví dụ tương tự:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
này có vẻ khá hữu ích với tôi, nhưng tôi đã tự hỏi nếu bạn Pythonis tas biết của bất kỳ ví dụ về cấu trúc này mà không liên quan đến I/O-đọc vòng? Có lẽ trong Thư viện chuẩn?
tôi có thể nghĩ ra ví dụ rất giả tạo, như sau:
>>> def f():
... f.count += 1
... return f.count
...
>>> f.count = 0
>>> list(iter(f,20))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>
Nhưng rõ ràng đây không phải là bất kỳ hữu ích hơn mà được xây dựng trong iterables. Ngoài ra, nó có vẻ như mã mùi với tôi khi bạn đang gán trạng thái cho một hàm. Tại thời điểm đó, tôi có thể sẽ làm việc với một lớp học, nhưng nếu tôi sẽ viết một lớp, tôi cũng có thể thực hiện giao thức lặp cho bất cứ điều gì tôi muốn thực hiện.
Đối với những người mà downvoted câu hỏi hoặc bình chọn để đóng, tôi sẽ đánh giá cao một số thông tin phản hồi như thế nào để hỏi câu hỏi này tốt hơn. –