【目錄】
一、迭代器
1、什么是迭代器
2、為何要有迭代器
3、如何使用迭代器
一、迭代器
1、什么是迭代器
#迭代器即迭代的工具,那什么是迭代呢?
#迭代是一個重復的程序,每次重復即一次迭代,并且每次迭代的結果都是下一次迭代的初始值
#只是單純地重復,因而不是迭代
while True: #只是單純地重復,因而不是迭代 print('===>') l=[1,2,3] count=0 while count < len(l): #迭代 print(l[count]) count+=1
2、為何要有迭代器
#1、為何要有迭代器? 對于序列型別:字串、串列、元組,我們可以使用索引的方式迭代取出其包含的元素,
但對于字典、集合、檔案等型別是沒有索引的,若還想取出其內部包含的元素,則必須找出一種不依賴于索引的迭代方式,這就是迭代器 #2、什么是可迭代物件? 可迭代物件指的是內置有__iter__方法的物件,即obj.__iter__,如下 'hello'.__iter__ (1,2,3).__iter__ [1,2,3].__iter__ {'a':1}.__iter__ {'a','b'}.__iter__ open('a.txt').__iter__ #3、什么是迭代器物件? 可迭代物件執行obj.__iter__()得到的結果就是迭代器物件 而迭代器物件指的是即內置有__iter__又內置有__next__方法的物件 檔案型別是迭代器物件 open('a.txt').__iter__() open('a.txt').__next__() #4、注意: 迭代器物件一定是可迭代物件,而可迭代物件不一定是迭代器物件
老母雞都是迭代器物件
keys(), values(), items(), range(), f,
3、如何使用迭代器
(1)迭代器物件的使用
dic={'a':1,'b':2,'c':3}
iter_dic=dic.__iter__() #得到迭代器物件,迭代器物件即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身
iter_dic.__iter__() is iter_dic #True
print(iter_dic.__next__()) #等同于next(iter_dic)
print(iter_dic.__next__()) #等同于next(iter_dic)
print(iter_dic.__next__()) #等同于next(iter_dic)
# print(iter_dic.__next__()) #拋出例外StopIteration,或者說結束標志
#有了迭代器,我們就可以不依賴索引迭代取值了
iter_dic=dic.__iter__()
while 1:
try:
k=next(iter_dic)
print(dic[k])
except StopIteration:
break
#這么寫太丑陋了,需要我們自己捕捉例外,控制next,python這么牛逼,能不能幫我解決呢?能,請看for回圈
(2)for回圈
#基于for回圈,我們可以完全不再依賴索引去取值了 dic={'a':1,'b':2,'c':3} for k in dic: print(dic[k])
#for回圈的作業原理
#1:執行in后物件的dic.__iter__()方法,得到一個迭代器物件iter_dic
#2: 執行next(iter_dic),將得到的值賦值給k,然后執行回圈體代碼
#3: 重復程序2,直到捕捉到例外StopIteration,結束回圈
(4)迭代器的優缺點
#優點:
1 、為序列和非序列型別提供一種統一的、不依賴于索引的迭代方式
2、惰性計算,節省記憶體:迭代器物件表示的是一個資料流,可以只在需要時才去呼叫next來計算出一個值,
就迭代器本身來說,同一時刻在記憶體中只有一個值,因而可以存放無限大的資料流,
而對于其他容器型別,如串列,需要把所有的元素都存放于記憶體中,受記憶體大小的限制,可以存放的值的個數是有限的,
#缺點:
1、除非取盡,否則無法獲取迭代器的長度(只有在next完畢才知道到底有幾個值)
2、一次性的,只能往后走,不能往前退
只能取下一個值,不能回到開始,更像是‘一次性的’,迭代器產生后的唯一目標就是重復執行next方法直到值取盡,否則就會停留在某個位置,等待下一次呼叫next;
若是要再次迭代同個物件,你只能重新呼叫iter方法去創建一個新的迭代器物件,如果有兩個或者多個回圈使用同一個迭代器,必然只會有一個回圈能取到值,
(5)自定義迭代器——生成器
【2020Python修煉記21】Python語法入門—生成器
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/165921.html
標籤:Python
