迭代器与生成器

一:迭代器
1.1引入几个概念:迭代器,可迭代对象,迭代器对象,
器:可以包含多个元素的容器
迭代:循环反馈,一次一个
迭代器:从装有多个值的容器中一次取出一个值给外界
遍历:被遍历的对象必须是有序容器
list和str以及tuple靠索引取值,有序容器,可以被遍历
1.2可迭代对象
对象:python中的一个对象(装有地址的变量)
可迭代对象:该对象有_iter_()方法
[],(),字典和集合等
1.3迭代器对象
可迭代对象通过iter得到迭代器对象,可以用next方法取值
迭代器对象可以做到不依赖索引取值,用next方法取值是从前往后有序的
迭代器对象取一个值就少一个值,取空了的话要重新生成迭代器对象
1.4 for循环迭代器,自带异常处理的while循环
自动获取被迭代对象的对象

总结:
可迭代对象:有_iter_()方法的对象,调用该方法返回迭代器对象
迭代器对象:有_next_()方法的对象,调用该方法从迭代器对象中一次捕获一个值
for循环迭代器:
1:自动获取被迭代对象的迭代器对象,
2:在内部一次一次调用—next方法取值
3:自动完成异常处理
二:生成器
它就是一个包含yield关键字的函数
它是一个迭代器对象,也就是一个可迭代对象,该函数调用得到的是生成器的对象,且不会执行函数体
def g_fn():
print(111111111111111)
yield '结果1'
print(222222222222222)
yield '结果2'
print(333333333333333)
yield '结果3'
print(444444444444444)
yield '结果4'
print(555555555555555)
yield '结果5'
g_obj = g_fn()
函数执行一次,在遇到下一个yield的时候停止,且可以拿到yield返回值,
r1=g_obj._next_()
print(r1)
r2=g_obj._next_()
print(r2)
生成器可以被for循环迭代
三:枚举对象
通过for迭代器 循环遍历 可迭代对象,需要知道迭代的索引
ls=[1,2,3,4,5]
for i v in enumerate(ls)
print(ls)

承蒙关照
原文地址:https://www.cnblogs.com/guanlei/p/10649128.html