【什么是迭代器】
迭代取值的工具,,迭代:是一个重复的过程,每次重复都是基于上一次的结果二继续的,单纯的重复并不是迭代
count = 0 while count < 5: print(count) count += 1 # 每一次重复都是和上面的结果是有关联的
1.1 为何要有迭代器
迭代器是用来迭代取值的工具,而涉及到把多个值循环取出来的类别有:元组、列表、字典、字符串、集合、文件
1 l = ['jinhao', 'wxx', 'lxx'] 2 i = 1 3 while i < len(l): 4 print(l[i]) 5 i += 1 6 ===================================== 7 # 上述迭代器取值方式只适用于有索引的数据类型,但是有局限性,要提供一种能够不依赖于索引的取值方式:迭代器
1.2可迭代对象和迭代器
可迭代对象:但凡内置有__iter__方法的都称之为可迭代对象(可以转换成迭代器的对象) s1 = 'xxx' res = s1.__iter__() # 转成迭代器对象 l1 = [] l1.__iter__() t = (1,) t.__iter__()
set={1,2,3}
res=set.__iter__() 转成迭代器对象
print(res.__next__())# 取值
print(res.__next__()) # 如果取超过集合里的值,则会报错
............................ 所有课迭代的类型有:字符串,列表,元组,字典,集合,文件类型,生成器
总结
可迭代对象是内置里有.__iter,但是迭代器对象是内置里有.__iter还有.__next
for循环的工作原理:for循环可以称之为迭代器循环
迭代器的优缺点:
1.节省内存
2.有一个同一取值的方式
3.取不到自己单独想要的值,不如索引
4.值取完,就无法二次取值
1.3 for循环也可以称之为迭代器循环(工作原理)
。
。
。
。
【生成器:yield】
案例:可以产生无穷个值得生成器(迭代器)
1 def my_range(start, stop, step=1): 2 while start < stop: 3 yield start 4 start += step 5 print('end') 6 7 8 g = my_range(1, 10, 2) 9 print(next(g)) 10 print(next(g)) 11 print(next(g))
。
。
【 yield表达式】