什么是迭代器
有iter()函数返回,可以通过next(it)函数取值的对象就是迭代器
迭代器协议
迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定
迭代器协议实现方法:
__next__(self) 方法来实现迭代器协议
语法形式:
class MyIterator:
def __next__(self):
迭代器协议
return 数据
什么是可迭代对象:
是指能用iter(obj) 函数返回迭代器的对象(实例)
可迭代对象内部需要定义__iter__(self) 方法来返回迭代器对象
class MyList: def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return "MyList(%s)" % self.data def __iter__(self): return MyListIterator(self.data) #创建迭代器并且返回 class MyListIterator: def __init__(self, lst): self.data_lst = lst self.cur_index = 0 #迭代器访问的起始位置 def __next__(self): if self.cur_index >= len(self.data_lst): #判断如果当前的索引大于长度时,则抛出异常 raise StopIteration i = self.data_lst[self.cur_index] self.cur_index += 1 return i myl = MyList([2,3,4,5]) it = iter(myl) print(next(it)) print(next(it)) print("------") for x in myl: print(x) 输出结果: tarena@tedu:~/zengsf/827$ python3 exercise827_2.py 2 3 ------ 2 3 4 5