迭代类方法next()和__next__()有什么用以及区别是什么?
我对Python的迭代器有点迷糊。我偶尔会用到它们,但我不记得自己是怎么创建一个的。我在某个地方看到过一段代码,但我记不清是哪里了:
class Foo(object):
def __init__(self):
self.something = "initial_value"
def __iter__(self):
return self
def next(self):
# I don't quite remember what was here :S
return self.something
我猜__iter__()
这个方法应该是用来返回一个迭代器的,而那个迭代器应该有一个next方法,对吧?那__next__()
这个方法又是干什么的呢?它是用来直接在一个类上进行迭代,而不需要通过__iter__()
方法返回另一个迭代器吗?
2 个回答
8
在Python 3中,next
这个名字被改成了__next__
。至于它的作用,就是返回下一个项目,如果没有更多的项目了,就会抛出一个叫StopIteration
的错误。
18
PEP 3114 把 iterator.next()
改成了 iterator.__next__()
。这个变化是在 3.0 版本中实现的。上面的链接里有详细的内容。