迭代器:
迭代就指的是一个重复的过程,每次一次重复都是基于上一次的结果而来。
之前取值的都是基于索引关系,使用列表、字符串、元组
li = ['a', 'b', 'c', 'd', 'e'] #li = ('a', 'b', 'c', 'd', 'e') #li = 'hello' i = 0 while i < len(li): print(li[i]) i += 1
但是这种取值方式对于字典,集合,文件对象,所以Python产生一种迭代的机制。
为什么使用迭代器?
为了找出一种通用的&可以不依赖索引的迭代取值方式。
如何使用迭代器?
可迭代对象,但凡内置有__iter__方法的对象可以被称为可迭代对象
迭代器对象,既内置有__iter__方法,也同时内置__next__方法被称之为迭代器对象。
关于__iter__方法:
调用可迭代对象的__iter__方法会得到迭代器对象
调用迭代器对象的__iter__方法会得到迭代器对象本身。
4. 总结迭代器的优缺点:
优点:
1. 提供了一种通用的&可以不依赖于索引的迭代取值方式
2. 同一时刻在内存中只有一个值,更加节省内存
缺点:
1. 取指定值不如索引灵活,并且迭代器是一次性的
2. 无法预知迭代器数据的个数
可迭代的对象: str,list,tuple,dict,set,文件对象
迭代器对象: 文件对象
可迭代的对象=====》迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,该返回值就是对应的迭代器对象
li = [1,2,3,4] dic = {'a':1} st = 'hello' tup = ('a',1) se = {'a','c','d'} iter_li = li.__iter__() iter_dic = dic.__iter__() iter_st = st.__iter__() iter_tup = tup.__iter__() iter_se = se.__iter__() f = open('a.txt',mode='w',encoding='utf-8') iter_f = f.__iter__()
迭代器的内置方法__next__
print(iter_dic.__next__()) print(iter_dic.__next__())#超过元素个就会报错 StopIteration
可以使用try Except来检测报错
while True: try: print(iter_st.__next__()) except: break
for又被称为迭代循环:在底层是将可迭代对象或迭代器装换为迭代器,再循环取值的工作原理。