在列表中,如果我们要将列表反向迭代通常使用reverse()。但这个方法有个缺陷就是会改变列表。
因此,我们推荐使用reversed(),它会返回一个迭代器。这里,我们可以实现__reversed__()解决反向
迭代问题。
class FloatRange:
def __init__(self,start,end,step):
self.start = start
self.end = end
self.step = step
def __iter__(self): #正向迭代
t = self.start
while round(t,2)<=round(self.end,2):
yield t
t+=self.step
def __reversed__(self): #反向迭代
t= self.end
while round(t,2)>=round(self.start,2):
yield t
t-=self.step
if __name__ == '__main__':
for x in FloatRange(3.0,4.0,10.0):
print(x)
for x in reversed(FloatRange(3.0,4.0,10.0)): #第一次遍历取走了3.0 所以此时只剩()4.0,10.0)
print(x)