【发布时间】:2012-05-11 22:54:39
【问题描述】:
Python 2.6 引入了next 函数。
为什么这是必要的?人们总是可以输入obj.next() 而不是next(obj)。
后者更pythonic?
【问题讨论】:
-
我一直想知道为什么受 Monty Python 启发的 Python 语言觉得有必要创造术语“pythonic”而不是更自然的“Pythonesque”.....
Python 2.6 引入了next 函数。
为什么这是必要的?人们总是可以输入obj.next() 而不是next(obj)。
后者更pythonic?
【问题讨论】:
PEP 3114 描述了这一变化。关于动机的摘录:
此 PEP 建议将
next方法重命名为__next__, 与 Python 中包含方法的所有其他协议一致 作为语言级协议的一部分隐式调用,并且 引入名为next的内置函数来调用__next__方法, 与其他协议明确的方式一致 调用。
请务必阅读此 PEP 了解更多有趣的细节。
至于你为什么要使用内置的next:一个很好的理由是next方法在Python 3中消失了,所以为了可移植性最好开始使用@ 987654328@尽快内置。
【讨论】:
通过在python 3) 方法中调用
next()(__next__()从迭代器 中检索下一项。如果给出 default,则在迭代器耗尽时返回,否则将引发StopIteration。
您将获得default 选项。
【讨论】:
default 参数:obj.next(default)?
next() 方法不再存在。它被__next__() 取代。 next() 函数允许统一的行为。
除了明显的附加功能外,与生成器表达式一起使用时看起来也更好。比较
(x for x in lst if x > 2).next()
到
next(x for x in lst if x > 2)
后者更符合 Python 的其他风格,恕我直言。
【讨论】:
StopIteration)。
Enumerable#find。