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
насколько это возможно.
Ответ 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.