迭代
每一次
对过程的重复
称为一次“迭代”,而每一次迭代得到的结果
会作为下一次迭代的初始值
。例如:循环获取容器中的元素。
可迭代对象iterable
具有__iter__函数的对象,可以返回迭代器对象。
对list、tuple、dict、set、str等类型的数据可以通过for…in…这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(Iterable)。
class 可迭代对象名称:
def __iter__(self):
return 迭代器
简单总结:
迭代器 = 可迭代对象.iter()
可以被next()函数调用并返回下一个值的对象
迭代器对象iterator
可以被next()函数调用并返回下一个值的对象。
实现了__next__()魔法方法(类实例化),该方法返回迭代器下一个值(保存得到下一个迭代值的算法)
class 迭代器类名:
def __init__(self, 聚合对象):
self.聚合对象= 聚合对象
def __next__(self):
if 没有元素:
raise StopIteration
return 聚合对象元素
理解可迭代对象iterable 与迭代器对象iterator
可迭代对象包含迭代器。
如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象拥有__next__方法,其是迭代器。
定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和__next__方法。
使用__iter__与__next__实现迭代(不使用for):
# 定义list类型的可迭代对象
my_list = [1, 2, 3, 7, 8, 9]
# 获取迭代器
# iterator = my_list.__iter__() # 直接写法
# iter()函数实际上就是调用了可迭代对象的__iter__方法
iterator = iter(my_list)
# 循环获取下一个元素
while True:
try:
# item = iterator.__next__() 直接写法
item = next(iterator) # 与iter() 同理
print(item)
# 异常处理
except StopIteration: