迭代器介绍
迭代器即用例迭代取值的工具,而迭代式重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复成为一次”迭代“;而每一次迭代得到的结果会作为下一个迭代的初始值,单纯的重复并不是迭代
可迭代对象
1、语法形式上,内置有__iter__方法的对象都是可迭代对象 2、字符串、列表、元祖、字典、集合、打开的文件都是可迭代对象
str='susu' str_iter=str.__iter__() #字符串 print(str_iter) list=[1,2,'a'] list_iter=list.__iter__() #列表 print(list_iter) dict={'name':'susu','paaswd':'123456'} dict_iter=dict.__iter__() #字典 print(dict_iter) tup=(1,2,3,4) tup_iter=tup.__iter__() #元祖 print(tup_iter) set={1,2,3,4,'yuyu'} set_iter=set.__iter__() #集合 print(set_iter) with open('aa.txt','rb') as f: f_iter=f.__iter__() #打开的文件 print(f_iter) """ 执行结果 <str_iterator object at 0x02BF09F0> <list_iterator object at 0x02BF0A30> <dict_keyiterator object at 0x02C1F600> <tuple_iterator object at 0x02C0EC90> <set_iterator object at 0x02C1ED78> <_io.BufferedReader name='aa.txt'> """
迭代器对象
1、调用obj.__iter__()方法返回的结果就是一个迭代器的对象 2、迭代器对象是内置有__iter__和__next__方法的对象 3、执行迭代器对象.__iter__()方法得到的仍然是迭代器本身 4、执行迭代器.__next__()就会计算出迭代器中的下一个值
str='susu' str_iter=str.__iter__() print(str_iter) print(str_iter.__next__()) # 输出 s print(str_iter.__next__()) # 输出 u print(str_iter.__next__()) # 输出 s print(str_iter.__next__()) # 输出 u print(str_iter.__next__()) #异常,报错 StopIteration,代表无值可取,迭代结束
for 循环
#for循环又称为迭代循环,in 或可以跟任意的可迭代对象 str='H i ,My name is susu' #首先会调用可迭代对象str内置的__iter__()方法拿到一个迭代器对象; #然后再item = 迭代器对象.__next__(),执行循环体完成一次循环 #循环,直到捕捉StopIteration异常,结束迭代 for item in str: print(item,'-',end='')
---不依赖索引迭代取值,用while循环
#字符串 str='H i ,My name is susu' #可迭代对象str str_iter=iter(str) #相当于在调用str.__iter__(),返回str的迭代器对象 while True: try: print(next(str_iter),end='') #相当于在调用str_iter.__next__() except StopIteration: #捕获异常 终止循环 break
#字典 dict={'name':'susu','paaswd':'123456'} dict_iter=dict.__iter__() print(dict_iter) print(dict_iter.__next__()) print(dict_iter.__next__()) """ 执行结果 name paaswd """ dict={'name':'susu','paaswd':'123456'} dict_iter=dict.__iter__() index=dict_iter.__next__() print(dict[index]) index1=dict_iter.__next__() print(dict[index1]) """ 执行结果 susu 123456 """ #字典 dict={'name':'susu','paaswd':'123456'} #可迭代对象dict dict_iter=iter(dict) #相当于在调用str.__iter__(),返回str的迭代器对象 while True: try: print(dict[next(dict_iter)],'',end='') #相当于在调用str_iter.__next__() except StopIteration: #捕获异常 终止循环 break """ 执行结果 susu 123456 """