Python 2:someIterator.next()与next(someIterator):Python 3

时间:2016-03-25 01:44:06

标签: python-2.7 python-3.x iterator

在Python 2中,迭代器提供.next(),一个可调用的方法:

it = iter(xrange(10))
it.next()
> 0
it.next()
> 1
...

在Python 3中,必须使用内置函数next()

it = iter(range(10))
next(it)
> 0
next(it)
> 1
...

这只是"语法糖"?就像通过将next()移动到内置函数中来使用更明显一样?或者这个变化背后隐藏着任何先进的概念吗?

1 个答案:

答案 0 :(得分:3)

您直接询问PEP 3114

考虑以下代码:

class test:
    def __iter__(self):
        return self
    def next(self):
        return "next"
    def __next__(self):
        return "__next__"

x = test()
for i,thing in enumerate(x):
    print(thing)
    if i>4:
        break

在python 2 next中打印,但是在python 3 __next__中打印,因为隐式调用该方法,因此匹配其他隐式方法(例如__add__)或更有意义__getitem__the PEP中描述。{/ p>

如果您打算明确使用next,那么它基本上是“语法糖”,以便nextiter的工作方式基本相同:

it = iter(x)
a = next(it)

更加一致:

it = iter(x)
a = it.next()

以及诸如随机数生成器之类的对象可以定义.next(下一个数字)方法,而不一定是可能留下歧义/混淆的迭代器。