我有以下代码是我为一门运行良好的课程编写的:
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
Run Code Online (Sandbox Code Playgroud)
作业的下一部分是把这个函数变成一个类。我知道这不切实际,但这是被问到的。我对类的了解非常有限,但我想出了以下代码:
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))
Run Code Online (Sandbox Code Playgroud)
输出始终读取 TypeError: 'ReverseIter' object is not iterable。我不知道为什么会出现这种情况。任何解释或建议都会有所帮助。顺便说一下上面的print语句的输出应该分别是True, True, 3, 2, 1, Stop Iteration。
一个对象是一个迭代器,如果它有一个__next__方法,它被调用来获取下一个项目(并且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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |