将函数转换为类

2024-05-17 15:35:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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”对象不可iterable。我不知道为什么会这样。任何解释或建议都会有帮助。上述print语句的输出应分别为True、True、3、2、1、Stop迭代。你知道吗


Tags: 代码inselflendeforderititerable
2条回答

如果一个对象有一个__next__方法,那么它就是一个iterator,这个方法被调用来获取下一个项目(当它用完时应该引发StopIteration),而__iter__返回一个迭代器(通常只是self

class ReverseIter:
    def __init__(self, sequence):
        self.sequence = sequence
        self.index = len(sequence) 
    def __iter__(self):
        return self
    def __next__(self):
        if self.index > 0:
            self.index -= 1
            return self.sequence[self.index]
        else:
            raise StopIteration

必须实现__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 

相关问题 更多 >