Подтвердить что ты не робот

Python: Почему я должен использовать next(), а не obj.next()?

В Python 2.6 была введена функция next.

Почему это было необходимо? Всегда можно вводить obj.next() вместо next(obj).

Является ли последнее более pythonic?

4b9b3361

Ответ 1

PEP 3114 описывает это изменение. Выдержка из мотивации:

Этот PEP предлагает, чтобы метод next был переименован в __next__, в соответствии со всеми другими протоколами на Python, в которых неявно называемый как часть протокола на уровне языка, и что встроенную функцию с именем next, чтобы вызвать метод __next__, в соответствии с тем, как другие протоколы явно вызывается.

Обязательно прочитайте этот PEP для более интересных деталей.

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

Ответ 2

next(iterator[, default])

Извлеките следующий элемент из итератора, вызвав его метод 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.