一、迭代器
1、什么是迭代器
1.1 迭代是一个重复的过程,每一次重复都是基于上一次的结果而进行的。
1.2 单纯的重复并不是迭代
2、为什么要用迭代器
2.1 找到一种可以不依赖索引的迭代取值方式
3、怎么用迭代器
3.1 可迭代对象:在python中,但凡带有__iter__方法的数据类型,都是可迭代的对象
1、可迭代的对象(数据类型)如下:
c=['a','b'] #列表类型
d=('a','b') #元组类型
e={'a','b'} #集合类型
f={'a':1,'b':2} #字典类型
g=open('aaa.py','rb',encoding='utf-8') #文本类型
2、不可迭代的对象(数据类型)如下:
a=1 #整数类型
b=1.1 #浮点数类型
3.2 迭代器对象:执行可迭代对象下__next__方法得到的返回值就是一个迭代器对象
c=['a','b'] res=c.__iter__() print(res) >>:<list_iterator object at 0x000001A651A58198> #迭代器的值
迭代器对象内置__next__方法(取出列表内的值,通过迭代器取值。而不依赖于索引取值)
c=['a','b'] #针对列表使用迭代器取值 res=c.__iter__() print(res.__next__()) #使用迭代器对象内置__next__方法,可以取出迭代器的值(取第一个) >>:a print(res.__next__()) #使用迭代器对象内置__next__方法,可以取出迭代器的值(取第二个) >>:b
dic={'a':1,'b':2} #针对字典使用迭代器取值 res=dic.__iter__() print(res.__next__()) #使用迭代器对象内置__next__方法,可以取出迭代器的值(取第一个) >>:a print(res.__next__()) #使用迭代器对象内置__next__方法,可以取出迭代器的值(取第二个) >>:b print(res.__next__()) #使用迭代器对象内置__next__方法,可以取出迭代器的值(取第二个) >>:Traceback (most recent call last): >>:StopIteration #当打印的值超过字典内值后们就会报错"StopIteration",这边是字典内的值被取光了
解决"StopIteration"报错问题,使用try+except StopIteration的方式
dic={'a':1,'b':2} res=dic.__iter__() while True: try: print(res.__next__()) except StopIteration: break # >>:a # # >>:b
4、for 循环的底层运行机制
l=['a','b','v'] #定义列表 i=0 while i < len(l): #使用while循环的方式打印列表l内的值 print(l[i]) i+=1 for n in l: #使用for循环的方式打印列表l内的值 print(n)