将我的函数转换为类

时间:2018-08-09 00:02:57

标签: python python-3.x

我为一个运行良好的课程编写了以下代码:

def reverse_iter(iterable):
    """Return a generator that yields items from iterable in reverse order"""
    last = len(iterable) - 1
    while last >= 0:
        yield iterable[last]
        last -= 1

任务的下一部分是将此函数转换为类。我知道这不切实际,但这是要问的问题。我对类的了解非常有限,但是我想出了以下代码:

class ReverseIter:
    """Class whose instances iterate the initial iterable in reverse order"""
    def __init__(self, iterable):
        self.iterable = iterable

    def iterreverse(self):
        last = len(self.iterable) - 1
        while last >= 0:
            yield self.iterable[last]
            last -= 1  

nums = [1, 2, 3, 4]
it = ReverseIter(nums)
print(iter(it) is it)
print(next(it) == 4)
print(next(it))
print(next(it))
print(next(it))
print(next(it))

输出始终读取TypeError:“ ReverseIter”对象不可迭代。我已经知道为什么会这样。任何解释或建议都会有所帮助。顺便说一下,上面的print语句的输出应该分别为True,True,3、2、1,停止迭代。

2 个答案:

答案 0 :(得分:4)

如果对象具有__next__方法,则该对象为iterator,该方法被调用以获取下一项(并且在耗尽时应引发StopIteration)和{{1 }}会返回一个迭代器(通常只是__iter__

self

答案 1 :(得分:0)

您必须实现__next__方法,如下代码。

 class ReverseIter:

     """Class whose instances iterate the initial iterable in reverse order"""

     def __init__(self, iterable):
         self.iterable = iterable

     def __iter__(self):
         last = len(self.iterable) - 1
         while last >= 0:
             yield self.iterable[last]
             last -= 1