Почему Python 2.6 добавил глобальную функцию next ()? - PullRequest
14 голосов
/ 18 марта 2009

Я заметил, что Python2.6 добавил next () в список глобальных функций .

next(iterator[, default])

Retrieve the next item from the iterator by calling its next() method.

Если задано default, оно возвращается, если итератор исчерпан, в противном случае StopIteration поднято.

Какова была мотивация для добавления этого? Что вы можете сделать с next(iterator), что вы не можете сделать с iterator.next() и предложением except для обработки StopIteration?

Ответы [ 3 ]

18 голосов
/ 18 марта 2009

Это просто для согласованности с такими функциями, как len(). Я верю next(i) звонкам i.__next__() внутренне.

См. http://www.python.org/dev/peps/pep-3114/

10 голосов
/ 18 марта 2009

Обратите внимание, что в Python 3.0+ метод next был переименован в __next__. Это из-за последовательности. next - это специальный метод, и специальные методы называются по соглашению (PEP 8) с двойным подчеркиванием в начале и в конце. Специальные методы не предназначены для непосредственного вызова, поэтому была введена встроенная функция next.

0 голосов
/ 18 марта 2009

Он вызывает __next__ внутри, но делает его более «функциональным», чем «объектно-ориентированным». Имейте в виду, что это только мое мнение, но мне не нравится next(i), а не i.next(). Но, как сказал Стив Мак, это также немного помогает в последовательности.

...