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