如何进行反向迭代以及如何实现反向迭代

问题
实现一个连续浮点数发生器FloatRange(和xrange类似),
根据给定范围(start,end)和步长值(step)产生一些连续的浮点数
,如迭代FloatRange(3.0,4.0,0.2)可产生序列:

普通做法:

l = [1,2,3,4,5]
l.reverse()
# 此时虽然实现了反向,但是改变了列表本身
print l

# 使用切片操作,依然可以得到列表的反向
print l[::-1]

高级实现:

  • 正向的我们在上一节中通过iter实现。
  • 那么反向我们将通过reversed实现
class FloatRange:
    def __init__(self, start, end, step =0.1):
        self.start = start
        self.end = end
        self.step = step

    def __iter__(self):
        t = self.start
        while t <= self.end:
            yield t
            t += self.step

    def __reversed__(self):
        t = self.end
        while t >= self.start:
            yield t
            t -= self.step      
        
for x in FloatRange(1.0,4.0,0.5):
    print x
print '*'*20
for x in reversed(FloatRange(1.0,4.0,0.5)):
    print x

你可能感兴趣的:(如何进行反向迭代以及如何实现反向迭代)