2013-04-30 21 views
11

Czy istnieje obiektywna definicja? Czy jest zaimplementowany jako fragment kodu źródłowego Pythona? Jeśli tak, czy ktoś mógłby wytworzyć dokładne linie kodu? Czy wszystkie języki mają, powiedzmy, własne protokoły iteratora "for"?Czym dokładnie jest protokół iteratora Pythona?

+1

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

+1

Większość języków nie implementuje instrukcji podobnych do Pythona (które są naprawdę najlepiej opisane jako "foreach"). C-standard 'for (init, cond, incr)' nie jest podobny do pętli for Pythona. –

Odpowiedz

17

Jest położony here w docs:

Jedna metoda musi być zdefiniowana dla obiektów kontenerowych w celu zapewnienia wsparcia iteracji:

container.__iter__()

zwraca iterator obiektu. Obiekt jest wymagany do obsługi protokołu iteratora opisanego poniżej. Jeśli kontener obsługuje różne typy iteracji, można zastosować dodatkowe metody, aby konkretnie żądać iteratorów dla tych typów iteracji. (Przykładem obiektu obsługującego wiele form iteracji byłaby struktura drzewa obsługująca zarówno operację szerokości i pierwszego jak i pierwszego przejścia.) Ta metoda odpowiada szczelinie tp_iter struktury typów obiektów Pythona w Python/C API.

Iterator samych przedmiotów są wymagane do tworzenia następujące dwa sposoby, które razem tworzą protokół iteracyjnej:

iterator.__iter__()

powrotu sam obiekt iteracyjnej. Jest to wymagane, aby umożliwić używanie zarówno kontenerów, jak i iteratorów z instrukcjami for i in. Ta metoda odpowiada szczelinie tp_iter struktury typów obiektów Pythona w Python/C API.

iterator.next()

Powrót następny element z pojemnika. Jeśli nie ma dalszych elementów, zwiększ wyjątek StopIteration. Ta metoda odpowiada szczelinie tp_iternext struktury typów obiektów Pythona w Python/C API.

+7

Również 'next' to' __next__' w py3 – Kos

+2

Jeśli dodasz przykład, zagłosuję. ;-) – polarise