使用__iter__和__reversed__实现正反向迭代器
概述:内置的iter(),reversed()函数可以进行正反向迭代,如果需要定制正反向迭代,要怎么做呢?
事实上iter()函数是调用的__iter__方法, reversed(),则是调用的__reversed__方法,那么只需要重写这两个方法即可。
class Countdown:
def __init__(self, start):
self.start = start
# 向前迭代函数(数从大到小输出)
def __iter__(self):
n = self.start
while n > 0:
yield n
n -= 1
# 反向迭代(数从小到大输出)
def __reversed__(self):
n = 1
while n <= self.start:
yield n
n += 1
Count = Countdown(5)
# 向前迭代
for i in iter(Count): # 或者写成for i in Count:也行
print(i)
print("我是分割线...")
# 向后迭代
for x in reversed(Count):
print(x)