python迭代器生成器
1、python iterator 迭代器,只要定义了next或者__next__方法就是迭代器,迭代器提供了一个统一的访问集合的接口。只要是实现了__iter__()或__getitem__()方法的对象,就是可以迭代对象,就可以使用迭代器进行访问,Python提供了两个通用迭代器对象。第一个是序列 迭代器,它支持__getitem__() 方法的任意序列。第二个使用可调用对象和一个sentinel值,为序列中的每个项调用callable,并在返回sentinel值时结束迭代。如下l1是一个可迭代对象,It1是生产的迭代器

2、我们通过代码来理解下迭代器
l1=[1,2,3,4,5] 可以迭代的对象It1=l1.__iter__() 生产迭代器print(It1) 这里会输出 迭代器对象 ,<listiterator object at 0x00000000031DEEB8>
print It1.next() 第一个元素print It1.next() 第二个元素
具体输出如图二所示


3、迭代对象也可以这样被迭代器迭代输出,如下所示我们把两种方式比较下
l1=[1,2,3,4,5]It1=l1.__iter__()It2=iter(l1) 使用iter方法生成print(It1)
print(It2)这里会输出 迭代器对象
print It1.next()print It1.next()print It2.next() 输出第一元素print(It2.next())输出第二元素
具体输出如图二,代码如图一所示


4、对迭代器和迭代对象有了认识下面我们看看生成器Generator,Generator对象是Python用来实现迭代器的生成对象。它们通常是通过迭代产生值的函数而不是创建对象,其实生成器也是迭代器的一种形式,如下Ge就是我定义的一个生成器


5、生成器操作,我们对我们定义的Ge进行输出操作,如下使用next方法进行输出
Ge=(a*a for a in range(10))print(Geprint Ge.next() 输出元素一print Ge.next() 输出元素二
print Ge.next() 输出元素三


6、对于生成器,通常情况我们使用for循环来输出,而不是next
for g in Ge : print(g)
依次输出,细心的朋友会发现,for是从next之后开始迭代输出的


7、yield 在 Python 中被称之为 generator 生成器
我们看下yield的使用
def Gen_erator(): for g1 in range(10): yield g1print Gen_erator()ge=Gen_erator()print(ge)
我们会发现 ge就是个生成器 ,通过yield我们可以把计算保存在生成器中,减少内存使用

