Python 2.6 引入了一个next
函数。
为什么这是必要的?人们总是可以键入obj.next()
而不是next(obj)
.
是后者更多pythonic
吗?
PEP 3114描述了这种变化。关于动机的摘录:
该 PEP 建议将该
next
方法重命名为__next__
,这与 Python 中的所有其他协议一致,其中方法作为语言级协议的一部分被隐式调用,并且引入了一个名为的内置函数next
来调用__next__
方法,与显式调用其他协议的方式。
请务必阅读此 PEP 以了解更多有趣的细节。
至于为什么要使用next
内置:一个很好的理由是该next
方法在 Python 3 中消失了,因此为了可移植性,最好尽快开始使用next
内置。
通过在 python 3)方法中调用迭代器从迭代器中检索下一项。如果给出默认值,则在迭代器耗尽时返回,否则引发。
next()
(__next__()
StopIteration
你得到了default
选择。
除了明显的附加功能外,与生成器表达式一起使用时它看起来也更好。比较
(x for x in lst if x > 2).next()
到
next(x for x in lst if x > 2)
后者与 Python 的其他风格更加一致,恕我直言。