输入错误Iter - Python3

Tha*_*ela 9 python python-2.7 python-3.x

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

TypeError: iter() returned non-iterator of type 'counter'  in python 3
Run Code Online (Sandbox Code Playgroud)

这是在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)
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 19

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

来自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
Run Code Online (Sandbox Code Playgroud)


Pad*_*ham 5

你不需要__next__(self)下一个:

def __next__(self): 
Run Code Online (Sandbox Code Playgroud)