2013-04-30 40 views
11

Có định nghĩa khách quan không? Nó được thực hiện như một đoạn mã nguồn của python? Nếu vậy, ai đó có thể tạo ra các dòng mã chính xác? Có tất cả các ngôn ngữ với, nói, một 'cho' giao thức lặp lại tuyên bố của riêng mình?Giao thức lặp của Python chính xác là gì?

+1

http://docs.python.org/3/reference/compound_stmts.html#the-for-statement –

+1

Hầu hết các ngôn ngữ không thực hiện giống như Python cho các câu lệnh (được mô tả tốt nhất là "foreach"). Tiêu chuẩn C cho (init, cond, incr) 'không giống như Python cho vòng lặp. –

Trả lời

17

Nó nằm here trong tài liệu:

Một phương pháp cần phải được xác định cho các đối tượng container để cung cấp lặp hỗ trợ:

container.__iter__()

Return đối tượng một iterator. Đối tượng được yêu cầu để hỗ trợ giao thức lặp được mô tả bên dưới. Nếu một vùng chứa hỗ trợ các kiểu lặp khác nhau, các phương thức bổ sung có thể được cung cấp để yêu cầu các trình vòng lặp cụ thể yêu cầu cho các kiểu lặp đó. (Ví dụ về một đối tượng hỗ trợ nhiều dạng lặp lại sẽ là cấu trúc cây hỗ trợ cả giao thoa đầu tiên và chiều sâu đầu tiên.) Phương thức này tương ứng với khe tp_iter của cấu trúc kiểu cho các đối tượng Python trong API Python/C.

Các iterator đối tượng mình được yêu cầu để hỗ trợ hai phương pháp sau đây, mà cùng nhau tạo thành giao thức iterator:

iterator.__iter__()

Return đối tượng iterator riêng của mình. Điều này là bắt buộc để cho phép cả hai vùng chứa và các trình vòng lặp được sử dụng với các câu lệnh for và in. Phương thức này tương ứng với khe tp_iter của cấu trúc kiểu cho các đối tượng Python trong API Python/C.

iterator.next()

Trả lại mục tiếp theo từ vùng chứa. Nếu không có mục nào khác, hãy tăng ngoại lệ StopIteration. Phương thức này tương ứng với vị trí tp_iternext của cấu trúc kiểu cho các đối tượng Python trong API Python/C.

+7

Ngoài ra 'next' là' __next__' trong py3 – Kos

+2

Nếu bạn thêm một ví dụ tôi sẽ bỏ phiếu. ;-) – polarise

Các vấn đề liên quan