概述容器是可迭代对象,迭代器通常是可迭代对象,生成器是特殊的迭代器。https://nvie.com/posts/iterators-vs-generators/Iterable对象Iterable可以遍历对象元素获取数据:实现了__iter__()方法特点:可用于for语句list,set,tuple,dict等.容器对象是可迭代对象IteratorIterator实现了迭代器协议的对象迭代器接口协议:Python中迭代器的接口协议规定了如下两个方法,可以调用迭代器__next__()返回下一个元素。当没有元素时,抛出StopIteration异常__iter__()返回self,即迭代器本身的元素:实现__iter__()和__next__()方法特点:1.可以被next()函数调用并继续返回下一个值2。延迟计算,按需使用(延迟加载)3.不能直接使用下标获取数据示例:classUpperStringIterator:def__init__(self,text):self.text=textself.index=0def__iter__(self):returnselfdef__next__(self):try:upper_char=self.text[self.index].upper()除了IndexError:raiseStopIteration()self.index+=1returnupper_chars=UpperStringIterator("abc")foriins:print(i)#Result:#A#B#CgeneratorGenerator特殊的迭代器特点:1.与一般的迭代器相比,它会自动创建__iter__()和__next__()方法2.可以在协作程序编写中使用1.示例在生成器函数函数中使用yield关键字返回值:defget_combination(a,b):forleftina:forrightinb:yield(left,right)combination=get_combination([1,2],['A','B'])foritemincombination:print(item)#Result:#(1,'A')#(1,'B')#(2,'A')#(2,'B')2.生成器expression列表生成的生成器版本(xforxinrange(5))示例:g=(itemforiteminrange(10))print(isinstance(g,Generator))#Result:#TrueReferencehttps://nvie.com/posts/iterators-vs-generators/
