26

Python 2.6 引入了一个next函数。

为什么这是必要的?人们总是可以键入obj.next()而不是next(obj).

是后者更多pythonic吗?

4

3 回答 3

39

PEP 3114描述了这种变化。关于动机的摘录:

该 PEP 建议将该next方法重命名为__next__,这与 Python 中的所有其他协议一致,其中方法作为语言级协议的一部分被隐式调用,并且引入了一个名为的内置函数next来调用__next__方法,与显式调用其他协议的方式。

请务必阅读此 PEP 以了解更多有趣的细节。

至于为什么使用next内置:一个很好的理由是该next方法在 Python 3 中消失了,因此为了可移植性,最好尽快开始使用next内置。

于 2012-05-02T13:05:31.653 回答
28

next(iterator[, default])

通过在 python 3)方法中调用迭代器从迭代器中检索下一项。如果给出默认值,则在迭代器耗尽时返回,否则引发。next()(__next__()StopIteration

你得到了default选择。

于 2012-05-02T12:56:59.480 回答
12

除了明显的附加功能外,与生成器表达式一起使用时它看起来也更好。比较

(x for x in lst if x > 2).next()

next(x for x in lst if x > 2)

后者与 Python 的其他风格更加一致,恕我直言。

于 2012-05-02T12:58:30.097 回答