Python: Why should I use next() and not obj.next()?

built-in, iterator, python

Solution

PEP 3114 describes this change. An excerpt about the motivation:

This PEP proposes that the `next` method be renamed to `__next__`, consistent with all the other protocols in Python in which a method is implicitly called as part of a language-level protocol, and that a built-in function named `next` be introduced to invoke `__next__` method, consistent with the manner in which other protocols are explicitly invoked.

Be sure to read this PEP for more interesting details.

As for why you want to use the `next` built-in: one good reason is that the `next` method disappears in Python 3, so for portability it's better to start using the `next` built-in as soon as possible.

Problem

Python 2.6 introduced a `next` function. Why was this necessary? One could always type `obj.next()` instead of `next(obj)`. Is the latter more `pythonic`?

Original source

Related problems