#迭代器 ''' 迭代是訪問集合元素的一種方式,迭代器是一個能夠記住遍歷位置的對象 迭代器對象從集合的第一個元素開始訪問,直到所有的元素都被訪問完結束 如果想訪問一個元素,需要把這個元素前面的所有元素都遍歷后,才可以訪問 ''' #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