Python: Почему я должен использовать next(), а не obj.next()?
В Python 2.6 была введена функция next.
Почему это было необходимо? Всегда можно вводить obj.next() вместо next(obj).
Является ли последнее более pythonic?
Ответ 1
PEP 3114 описывает это изменение. Выдержка из мотивации:
Этот PEP предлагает, чтобы метод next был переименован в __next__, в соответствии со всеми другими протоколами на Python, в которых неявно называемый как часть протокола на уровне языка, и что встроенную функцию с именем next, чтобы вызвать метод __next__, в соответствии с тем, как другие протоколы явно вызывается.
Обязательно прочитайте этот PEP для более интересных деталей.
Что касается того, почему вы хотите использовать встроенный next: одна хорошая причина заключается в том, что метод next исчезает в Python 3, поэтому для переносимости лучше начать использовать встроенный next насколько это возможно.
Извлеките следующий элемент из итератора, вызвав его метод next()(__next__() в python 3). Если задано значение по умолчанию, оно возвращается, если итератор исчерпан, иначе StopIteration будет поднят.
Вы получаете опцию default.
Ответ 3
Помимо очевидной дополнительной функциональности, она также выглядит лучше при использовании вместе с выражениями генератора. Сравнить
(x for x in lst if x > 2).next()
to
next(x for x in lst if x > 2)
Последнее намного больше соответствует остальному стилю Python, IMHO.