迭代器,生成器

2022-05-10 10:36:32 字數 2863 閱讀 8872

---恢復內容開始---

一,什麼是可迭代物件?迭代物件與迭代器的區別?

只含有__iter__方法的資料是可迭代物件  含有__iter__方法,並且含有__next__方法的資料是迭代器

擁有__iter__方法的物件叫可迭代物件 遵循可迭代協議.

1 判斷是否為可迭代物件   dir()顯示物件的所有方法

可迭代物件有:str list tuple dict set range

第一種方法

s = '

abc'

print('

__iter__'in

dir(s))

print('

__iter__

'in dir(333))

結果:

方法二  匯入乙個模組  from collections import iterable 

l = [1,2,3]

l_iter = l.__iter__

()from collections import

iterable #判斷是否為迭代物件

from collections import

iterator #判斷是否為迭代器

print

(isinstance(l,iterable))

print

(isinstance(l,iterator))

print

(isinstance(l_iter,iterator))

print(isinstance(l,list))

結果:

二.迭代器  具有__iter__並且具有__next__方法的物件叫迭代器   遵循迭代器協議

迭代器的意義?

1,迭代器節省記憶體.

2,迭代器惰性機制.

3,迭代器不能反覆,一直向下執行.

1. 迭代物件轉化成迭代器

#

迭代器取值:

s2 = '

abcd

's3 = s2.__iter__

()print(s3.__next__

())print(s3.__next__

())print(s3.__next__

())print(s3.__next__())

結果:

for迴圈與迭代器的比較

#

for迴圈的機制.

#內部含有__iter__方法,他會將可迭代物件先轉化成迭代器.

#,然後在呼叫__next__方法.

#他有異常處理的方法.

for i in [1,2,3]:

print

(i)l = [1,2,3]

l_iter = l.__iter__

()while

true:

try:

print(l_iter.__next__

())

except

stopiteration:

break

結果:

三 什麼是生成器?

生成器的本質就是迭代器,

1 生成器是自己用python**寫的迭代器.

1,可以用生成器函式

2,可以用各種推導式構建迭代器.

3,可以通過資料轉化.

#

生成器函式 生成器

defgener():

print('

aaa'

)

yield 222 #乙個yield列印一次

print('

bbb'

)

yield 333

print('

ccc'

)g =gener() #g為生成器的記憶體位址

print

(g)print(g.__next__())

結果:

2 return yield 區別

return 返回給呼叫者值,並結束此函式.

yiled 返回給呼叫者值,並將指標停留著當前位置.

def

gener():

yield 222count = yield 333

print('

-------->

',count)

b=yield

'aaa

'print

(b) a = yield

'aaa

'print

(a)g =gener()

print

(g.send(none))

print

(g.send(none))

print(g.send('

aaaa'))

print(g.send('

wwwwww

'))

結果:

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...