1.什么是迭代器
迭代器是用來迭代取值的工具,而迭代的意思是一個重復的程序,每一次的重復都是基于上一次的結果繼續的,單純的重復并不是迭代
2.為何要有迭代器
在python中涉及到需要把多個值回圈取出來的型別有:字串、串列、元組、字典、集合、打開檔案等,我們可以考慮使用while回圈的方式來回圈取出多個值,例如:
list=['egon','lin',11]
i=0
while i<len(list):
print(l[i])
i+=1
但是使用while方式迭代取值的方式只適合于有索引的資料型別,比如字串、元組、串列,
因此python必須提供一種不依賴索引的取值方式!這就是迭代器!
可迭代物件:但凡內置有__iter__方法的都稱之為可迭代物件,字串、字典、串列、元組、集合、檔案都是可迭代物件,內部都封裝了__iner__方法!
迭代器物件:內置有__next__()和__iter__()方法的物件
可迭代物件呼叫__iter__方法回傳的是一個迭代器物件,迭代器物件下有一個__next__()方法就可以取到可迭代物件的值,沒有值可取就會報stopiteration錯,
d={'a':1,'b':2,'c':3}
d_iterator=d.__iter__() #呼叫__iter__()把字典轉換為迭代器物件
d_iterator.__next__() #依次取出字典d中的key,每次取一個,取完繼續取則報錯
3.如何用迭代器
for回圈的作業原理:
for k in d:
print(k)
1.呼叫物件的__iter__()方法得到一個迭代器物件
2.呼叫迭代器物件的__next__()方法拿到一個回傳值,然后將回傳值賦值給k
3.回圈第二步,直到拋出stopiteration例外,for回圈補捉到例外break結束回圈
4.迭代器的優缺點
優點:
1)可以迭代沒有索引的可迭代物件
2)迭代的時候是每迭代一次,讀取一次,不會把內容全部一次讀取出來,這樣會損耗記憶體
缺點:
1)不可以像索引那樣針對性的取值,總是一次性的迭代完!
5,自定義迭代器(生成器)
5.1 如何得到自定義迭代器
在函式體記憶體在yield,在呼叫函式時并不會執行函式體代碼,而是會回傳一個生成器,即自定義的迭代器!
def func():
print('第一次')
yield 1
print('第二次')
yield 2
print('第三次')
d = func()
res1=next(d)
print(res1)
res2=d.__next__()
print(res2)
# __next__()就等于next(),呼叫了next方法會觸發函式體代碼運行,然后遇見yield停下來,將yield后面的值回傳,如果在呼叫了next方法之后沒有回傳值了就會報錯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501782.html
標籤:其他
