# -*- coding: UTF-8 -*-
class Countdown:
def __init__(self, start):
self.start = start
def __iter__(self):
# Forward iterator
n = self.start
while n > 0:
yield n
n -= 1
def __reversed__(self):
# Reverse iterator
n = 1
while n <= self.start:
yield n
n += 1
for rr in reversed(Countdown(30)):
print(rr)
for rr in Countdown(30):
print(rr)
输出的结果是 1 到 30 然后 30 到 1 ,分别是顺序打印和倒序打印
2、同时迭代多个序列
你想同时迭代多个序列,每次分别从一个序列中取一个元素。你遇到过这样的需求吗?
为了同时迭代多个序列,使用 zip() 函数,具体示例:
# -*- coding: UTF-8 -*-
names = ['laingdianshui', 'twowater', '两点水']
ages = [18, 19, 20]
for name, age in zip(names, ages):
print(name,age)
输出的结果:
laingdianshui 18
twowater 19
两点水 20
其实 zip(a, b) 会生成一个可返回元组 (x, y) 的迭代器,其中 x 来自 a,y 来自 b。 一旦其中某个序列到底结尾,迭代宣告结束。 因此迭代长度跟参数中最短序列长度一致。注意理解这句话喔,也就是说如果 a , b 的长度不一致的话,以最短的为标准,遍历完后就结束。
利用 zip() 函数,我们还可把一个 key 列表和一个 value 列表生成一个 dict (字典),如下: