为什么我的代码'next()'函数在这个例子中没有被调用?

时间:2009-12-31 06:15:53

标签: python iterator

class a(object):
    w={'a':'aaa','b':'bbb'}
    def __iter__(self):
        return iter(self.w)
    def next(self):#this is not be called
        print 'sss'
        for i in self.w:
            return i

b=a()
for i in b:
    print i

以及__iter__next函数之间的关系是什么。

感谢

3 个答案:

答案 0 :(得分:1)

__iter__()中,您返回存储在self.w中的dict上的迭代器,而不是类本身。返回self代替将解决此问题。

答案 1 :(得分:1)

我不完全确定你在问什么,但是next()函数没有被调用,因为你从未明确地调用它。您定义__iter__,当您这样做时会调用它:

for i in b:

这应该隐式调用迭代器的.next()方法,但迭代器不是a,而是iter(self.w)。由于您的对象不是迭代器,因此永远不会调用其next()方法。

希望这有帮助。

答案 2 :(得分:1)

next应该记住最后一个位置并返回下一个项目(并不总是返回第一个项目,就像在代码中一样),当没有其他项目时,请提出StopIteration异常。< / p>

同样__iter__应该返回类本身。

请参阅Python documentation for iterators

在您的情况下,使用generator更合适:

class a(object):
    w={'a':'aaa','b':'bbb'}
    def __iter__(self):
        print 'sss'
        for i in self.w:
            yield i

b=a()
for i in b:
    print i