我为一个运行良好的课程编写了以下代码:
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,停止迭代。
答案 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