Python:我为什么要使用next()而不是obj.next()?

Dav*_*ter 25 python built-in next

Python 2.6引入了一个next函数.

为什么这有必要?人们总是可以打字obj.next()而不是next(obj).

后者更多pythonic吗?

Eli*_*sky 38

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

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

请务必阅读此PEP以获取更多有趣的细节.

至于想要使用next内置的原因:一个很好的理由是该next方法在Python 3中消失了,所以为了便于携带,最好尽快开始使用next内置.


eum*_*iro 26

next(iterator[, default])

通过在python 3)方法中调用它迭代器中检索下一个项目.如果给定default,则在迭代器耗尽时返回,否则引发.next()(__next__()StopIteration

你有default选择权.

  • @Tim:然后每个迭代器实现都必须复制逻辑. (9认同)
  • 此外,在Python 3中,`next()`方法不再存在.它被`__next __()`取代.`next()`函数允许统一行为. (5认同)

Nik*_* B. 12

除了显而易见的附加功能外,它与生成器表达式一起使用时看起来也更好.相比

(x for x in lst if x > 2).next()
Run Code Online (Sandbox Code Playgroud)

next(x for x in lst if x > 2)
Run Code Online (Sandbox Code Playgroud)

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

  • @Mark:是的,这就是这个成语的目的:从符合某个标准的迭代中返回第一个元素(否则提高`StopIteration`). (3认同)