迭代器與生成器

1.什么是迭代器

迭代器是用來迭代取值的工具,而迭代的意思是一個重復的過程,每一次的重復都是基于上一次的結果繼續的,單純的重復并不是迭代

泰山網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、響應式網站設計等網站項目制作,到程序開發,運營維護。創新互聯公司2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。

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方法之后沒有返回值了就會報錯!

5.2 yield的表達式

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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
主站蜘蛛池模板: 无码精品国产一区二区三区免费| 无码av免费毛片一区二区| 久久无码人妻一区二区三区| 蜜桃无码一区二区三区| 亚洲av无码一区二区三区天堂| 国产强伦姧在线观看无码| 无码超乳爆乳中文字幕久久| 免费无码AV一区二区| 久久久久琪琪去精品色无码| 在线无码视频观看草草视频| 午夜人性色福利无码视频在线观看| 久久中文字幕无码一区二区| 亚洲国产精品无码专区在线观看| 久久人妻无码一区二区| 无码欧精品亚洲日韩一区| 亚洲AV中文无码乱人伦在线视色| 亚洲AV永久青草无码精品| 精选观看中文字幕高清无码| 黄色成人网站免费无码av| 精品无码一区二区三区爱欲 | 亚洲国产精品无码久久久| 亚洲一区AV无码少妇电影| 亚洲av无码一区二区三区不卡| 国产在线无码制服丝袜无码| 无码一区18禁3D| 永久免费AV无码国产网站| 无码人妻精品一区二区三18禁| 国产成人无码区免费内射一片色欲 | 国产亚洲精久久久久久无码AV| 亚洲av永久无码一区二区三区| 亚洲一区无码中文字幕乱码| 亚洲av无码国产精品夜色午夜| 成年免费a级毛片免费看无码| 精品人妻无码一区二区三区蜜桃一| 亚洲爆乳少妇无码激情| 无码精品A∨在线观看免费| 亚洲av无码一区二区三区四区| 亚洲中文字幕无码中文字| 亚洲国产精品无码中文lv| 成人无码区免费A片视频WWW| 亚洲AV永久无码精品放毛片|