迭代器是用來迭代取值的工具,而迭代的意思是一個重復的過程,每一次的重復都是基于上一次的結果繼續的,單純的重復并不是迭代
泰山網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、響應式網站設計等網站項目制作,到程序開發,運營維護。創新互聯公司2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。
在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,每次取一個,取完繼續取則報錯
for循環的工作原理:
for k in d:
print(k)
1.調用對象的__iter__()方法得到一個迭代器對象
2.調用迭代器對象的__next__()方法拿到一個返回值,然后將返回值賦值給k
3.循環第二步,直到拋出stopiteration異常,for循環補捉到異常break結束循環
優點:
1)可以迭代沒有索引的可迭代對象
2)迭代的時候是每迭代一次,讀取一次,不會把內容全部一次讀取出來,這樣會損耗內存
缺點:
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方法之后沒有返回值了就會報錯!
def dog(name):
print('%s正在吃東西'%name)
while True:
x = yield 1111
print('%s正在吃%s'%(name,x))
g=dog() # 函數里遇見yield說明不在是一個函數,而是返回了一個生成器
# 需要用send方法需要先初始化一下,即:seng里面傳一個none等同于調用了next(g)方法
g.send(None) # 此時函數停在了yield的地方
res=g.send('一根骨頭') # 把send里面的值傳給yield(只能傳一個值,可以是列表等),yield在傳給x
# 如果yield后面有值,則g.send()有返回值,沒有則返回none
print(res)
## 擴展:其實返回值可以后面放個列表,字典等,每次操作就往列表里加一個值
文章名稱:迭代器與生成器
網站URL:http://m.kartarina.com/article48/dsogiep.html
成都網站建設公司_創新互聯,為您提供微信小程序、營銷型網站建設、電子商務、做網站、品牌網站建設、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯