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, ИМХО.

Другие вопросы по тегам