在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()
移动到内置函数中来使用更明显一样?或者这个变化背后隐藏着任何先进的概念吗?
答案 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
,那么它基本上是“语法糖”,以便next
和iter
的工作方式基本相同:
it = iter(x)
a = next(it)
更加一致:
it = iter(x)
a = it.next()
以及诸如随机数生成器之类的对象可以定义.next
(下一个数字)方法,而不一定是可能留下歧义/混淆的迭代器。