2011-08-28 36 views
5

Tôi hơi bị mất trên các trình lặp vòng python. Tôi thỉnh thoảng sử dụng chúng, nhưng tôi không nhớ mình đã tự tạo ra một bản thân. Tôi đọc từ một nơi nào đó tôi không nhớ ở đâu, một mã như thế này:Các phương thức lớp lặp là gì tiếp theo() và __next __() cho, và sự khác biệt là gì?

class Foo(object): 
    def __init__(self): 
     self.something = "initial_value" 
    def __iter__(self): 
     return self 
    def next(self): 
     # I don't quite remember what was here :S 
     return self.something 

Tôi đoán __iter__() phương pháp phải trả về một iterator, và iterator rằng cần phải có một phương pháp ngay bên cạnh? Sau đó, phương pháp __next__() là gì? là nó cho trực tiếp iterating qua một lớp mà không có nó trở về một iterator với __iter__() phương pháp?

+0

** foo ** là một trình lặp. Trong trường hợp này, nó đơn giản trả về chính nó. Một đối tượng có thể hỗ trợ lặp lại, nhưng không phải là một trình lặp. – Wes

+0

cảm ơn, đã sửa mã. – yasar

Trả lời

7

PEP 3114 đổi tên thành iterator.next() thành iterator.__next__(). Điều này đã được thực hiện trong phiên bản 3.0. Liên kết ở trên chứa tất cả các chi tiết đẫm máu.

+1

Tôi nghĩ rằng bạn có nghĩa là 'iterator .__ next __()'. :-) –

+0

@ross cảm ơn bạn –

4

next đã được đổi tên thành __next__ bằng Python 3. Đối với những gì nó làm, nó sẽ trả lại mục tiếp theo hoặc tăng StopIteration nếu không còn nữa.

+0

Điều này khác với __iter __() như thế nào? –

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