输入错误Iter - Python3

时间:2015-01-30 23:07:16

标签: python python-2.7 python-3.x

有人可以解释为什么以下代码正在提供

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)

2 个答案:

答案 0 :(得分:19)

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

来自What’s New In Python 3.0

  

PEP 3114:标准的next()方法已重命名为__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

答案 1 :(得分:5)

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

def __next__(self):