类型错误 Iter - Python3

Type error Iter - Python3

有人可以解释为什么下面的代码给出

TypeError: iter() returned non-iterator of type 'counter'  in python 3

这在 python 2.7.3 中运行,没有任何错误。

#!/usr/bin/python3

class counter(object):

    def __init__(self,size):
        self.size=size
        self.start=0

    def __iter__(self):
        print("called __iter__",self.size)
        return self

    def next(self):
        if self.start < self.size:
            self.start=self.start+1
            return self.start
        raise StopIteration

c=counter(10)
for x in c:
    print(x)

在 python3.x 中你需要使用 __next__() 而不是 next()

来自 What’s New In Python 3.0:

PEP 3114: the standard next() method has been renamed to __next__().

但是,如果您希望您的对象在 python 2.X 和 3.X 中都可迭代,您可以将 next 函数分配给名称 __next__.

class counter(object):

    def __init__(self,size):
        self.size=size
        self.start=0

    def __iter__(self):
        print("called __iter__",self.size)
        return self

    def next(self):
        if self.start < self.size:
            self.start=self.start+1
            return self.start
        raise StopIteration

    __next__ = next # Python 3.X compatibility

您需要 __next__(self) 不是下一个:

def __next__(self):