【问题标题】:Type error Iter - Python3输入错误Iter - Python3
【发布时间】:2015-01-30 23:07:16
【问题描述】:

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

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)

【问题讨论】:

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


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

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

      def __next__(self): 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        相关资源
        最近更新 更多