2017.8.2迭代器和生成器

迭代器部分

可迭代协议

可以被迭代,切满足一定发要求,就是内部实现了'_itsr_'的方法。

迭代器:

迭代器遵循可迭代协议,并且同时实现了'_iter_'和'_next_'的方法。

for循环本质:

for循环就是基于迭代器协议提供了一个统一的可以遍历所有对象的方法,即在遍历之前,先调用对象的__iter__方法将其转换成一个迭代器,然后使用迭代器协议去实现循环访问,这样所有的对象就都可以通过for循环来遍历了

生成器部分

python中提供的生成器:

生成器:由常规函数定义,yield返回,且每执行一次就返回一次结果,并将函数至于挂起状态,以备再次调用!

生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

生成器Generator:

1.本质是一个迭代器(自带_iter_和_next_方法,不需要再去实现)

2.惰性计算,需要开发者编写

列表推导式和生成器表达式

#老男孩由于峰哥的强势加盟很快走上了上市之路,alex思来想去决定下几个鸡蛋来报答峰哥

egg_list=['鸡蛋%s' %i for i in range(10)] #列表解析

#峰哥瞅着alex下的一筐鸡蛋,捂住了鼻子,说了句:哥,你还是给我只母鸡吧,我自己回家下

laomuji=('鸡蛋%s' %i for i in range(10))#生成器表达式
print(laomuji)
print(next(laomuji)) #next本质就是调用__next__
print(laomuji.__next__())
print(next(laomuji))

==》》
#列表解析
sum([i for i in range(100000000)])#内存占用大,机器容易卡死
#生成器表达式
sum(i for i in range(100000000))#几乎不占内存
生成器使用的优点:
1.节省内存,延迟计算,一次只执行一个结果,因此处理大型数据会有优势
2.提高代码的可读性
原文地址:https://www.cnblogs.com/Leon27-29/p/7274840.html