#迭代器 ''' 迭代是访问集合元素的一种方式,迭代器是一个能够记住遍历位置的对象 迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完结束 如果想访问一个元素,需要把这个元素前面的所有元素都遍历后,才可以访问 ''' #1.可迭代的对象,像(1),(2)这些对象称之为可迭代对象(Iterable) #(1)以直接作用for循环的数据类型有:list/tuple/dict/set/str #(2)generator:生成器和生成器函数 # list1 = [11,22,33] # for i in list1: # print(i) # for char in 'i love china!': # print(char) #2.判断是否迭代 from collections import Iterable,Iterator # def outPrint(msg): # #判断msg是否可迭代 # flag = isinstance(msg,Iterable) # if flag: # for i in msg: # print(i) # else: # print(msg) # outPrint(1) # outPrint([11,22,33]) #练习1 # print(isinstance([],Iterable))#True # print(isinstance((),Iterable))#True # print(isinstance({},Iterable))#True # print(isinstance('love',Iterable))#True # print(isinstance((x for x in range(10)),Iterable))#True # 生成器不但可以作用于for循环,还可以被next函数不断调用,并饭后下一个值,直到 # 最后抛出StopIterable异常,表示无法返回下一个值 #练习2 #可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator) #如果是迭代器对象那一定可迭代 #判断迭代器对象 # print(isinstance([],Iterator))#False # print(isinstance((),Iterator))#False # print(isinstance({},Iterator))#False # print(isinstance('love',Iterator))#False # print(isinstance((x for x in range(10)),Iterator))#True #生成器都是Iterator对象,但list/dict/str虽然是Iterable,但不是Iterator #iter()函数 #把list/dict/str等等Iterable容器,变成Iterator list2 = [11,22,33] # print(next(list2)) list2 = iter(list2) print(next(list2)) print(next(list2)) print(next(list2)) # print(next(list2)) ''' 总结: 1.凡是可作用于for循环的对象都是Iterable 2.凡是可作用于next()的函数的对象都是Iterator 3.iter()函数用于把Iterable容器,变成Iterator 迭代器延展: 对于"流式"数据处理方式可减少内存消耗: 比如处理文件,大视频等,一下猛地把全部数据取出来放到内存里就会导致程序消耗大量内存 一般我们一部分一部分的对文件进行处理 ''' for text_line in open('userInfo.txt'): print(text_line) break