Для чего нужны методы класса итерации next () и __next __ (), и в чем разница? - PullRequest
7 голосов
/ 28 августа 2011

Я немного заблудился на итераторах Python. Я иногда использую их, но я не помню, чтобы сам создавал их. Я читал откуда-то, что я не помню где, такой код:

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

Я думаю, __iter__() метод должен возвращать итератор, и этот итератор должен иметь следующий метод, верно? Тогда как насчет __next__() метода? это для прямой итерации по классу без возврата другого итератора с методом __iter__()?

Ответы [ 2 ]

12 голосов
/ 28 августа 2011

PEP 3114 переименовано iterator.next() в iterator.__next__().Это было реализовано в версии 3.0.Ссылка выше содержит все кровавые подробности.

6 голосов
/ 28 августа 2011

next был переименован в __next__ в Python 3. Что касается того, что он делает, он должен вернуть следующий элемент или повысить StopIteration, если его больше нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...