python之旅:叠代器
阿新 • • 發佈:2018-03-30
返回 一次 直接 col 取值 while 自動 一次循環 方法
1、什麽是叠代器?
叠代器是一個重復的過程,並且每次重復都是機遇上一次的結果而來
要想了解叠代器到底是什麽?必須先了解一個概念,即什麽是可叠代的對象?
可叠代對象:在python中,但凡內置有__iter__方法的對象,都是可叠代對象
以下都是可叠代的對象: ( 你可以自己在對象後面 ._ 看下有沒有__iter__ ) str=‘hello‘ list=[1,2,3] tup={1,2,3} dic={‘x‘:1} s1={‘a‘,‘b‘,‘c‘} f=open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)
2、叠代器
叠代器:叠代取值工具,可叠代的對象執行__iter__方法得到的返回值就是叠代器對象
dic={‘x‘:1,‘y‘:2,‘z‘:3} iter_dic=dic.__iter__() #第一件事是獲得一個可叠代器,即調用了__iter__()函數 print(iter_dic.__next__()) #第二件事是循環的過程,循環調用__next__()函數。 print(iter_dic.__next__()) print(iter_dic.__next__())
print(iter_dic.__next__()) #第四行會提示哦,也相當於報錯,只有三個值,你取第四個值的時候會停止叠代# print(iter_dic.__next__())
StopIteratio
4、可叠代的對象vs叠代器對象?
可叠代的對象:str,list,tuple,dict,set,file
1、獲取可叠代對象的方式:python內置的有str,list,tuple,dict,set,file都是可叠代對象
2、特點:內置有__iter__方法的都叫可叠代的對象,執行該方法會拿到一個叠代器對象。
叠代器對象:文件對象本身就是叠代器對象
1、獲取叠代器對象的方式:
執行可叠代對象的__iter__方法,拿到的返回值就是叠代器對象2、特點:
內置有__next__方法,執行該方法會拿到叠代器對象中的一個值
內置有__iter__方法,執行該方法會拿到叠代器本身
str1=‘hello‘ list1=[1,2,3] tup1=(1,2,3) dic={‘x‘:1} s1={‘a‘,‘b‘,‘c‘} #文件本身就是叠代器對象 f=open(‘a.txt‘,‘w‘,encoding=‘utf-8‘) f.__next__()
5、叠代器的優缺點分析
叠代器的優點:
提供了一種可不依賴於索引的取值方式
叠代器更加節省內存
叠代器的缺點:
取值麻煩,只能一個一個取,只能往後取
並且是一次性的,無法用len獲取長度
1、提供了一種可不依賴於索引的取值方式
#這是a.txt文件的內容 adadaaasdasd dasdas das l=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) iter=l.__iter__() while True: #死循環 try: #用這個參數來檢測 print(iter.__next__(),end=‘‘) except StopIteration: #檢測什麽時候出現StopIteration break #監測到出現StopIteration 就break
l.close()
#結果如下
adadaaasdasd
dasdas
das
#沒有報錯
2、叠代器更加節省內存
item=range(0,100000000000000000000000000000000000000000000) #如rang,python2中會依次打印1,2,3,4,5,6.。。。python3中優化了叠代器直接打印出來,所以更省內存
print(item)
#結果如下
range(0, 100000000000000000000000000000000000000000000)
#取值麻煩,只能一個一個取,只能往後取 x=[1,2,3] iter_x=x.__iter__() while True: try: print(iter_x.__next__()) except StopIteration: break print(‘第二次=================================》‘) iter_x=x.__iter__() while True: try: print(iter_x.__next__()) except StopIteration: break #結果如下 1 2 3 第二次=================================》 1 2 3
6、for循環原理分析:
#6.1、for 循環稱之為叠代器循環,in後跟的必須是可叠代的對象 #6.2、for循環會執行in後對象的__iter__方法,拿到叠代器對象 #6.3、然後調用叠代器對象的__next__方法,拿到一個返回值賦值給line,執行一次循環體 #6.4、周而復始,直到取值完畢,for循環會檢測到異常自動結束循環 l=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) for line in l: #iter_l=l.__iter__() print(line,end=‘‘) for item in {‘x‘:1,‘y‘:2}: print(item,end=‘‘) #結果如下 adadaaasdasd dasdas das xy
python之旅:叠代器