迭代类方法next()和__next__()有什么用以及区别是什么?

14 投票
2 回答
5416 浏览
提问于 2025-04-17 00:29

我对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 3114iterator.next() 改成了 iterator.__next__()。这个变化是在 3.0 版本中实现的。上面的链接里有详细的内容。

撰写回答