13 迭代器 生成器部分

2022-05-09 23:18:58 字數 1778 閱讀 3288

課前知識點:

1、dir()   告訴我列表(或者其他)的所擁有的方法

2、__iter__:只要是能被for迴圈的資料型別,就一定擁有__iter__方法

3、迭代器:乙個列表執行了__iter__()之後的返回值就是乙個迭代器

4、iterable:可迭代的,只要含有__iter__方法就是可迭代的

迭代器的概念:

1、內部含有__next__和__iter__的就是迭代器------------迭代器協議

2、可迭代協議:

可以用for迴圈的都是可迭代的

可迭代的內部都有__iter__方法

只要是迭代器,就一定可迭代

3、【可迭代的】.__iter__方法就可以得到乙個迭代器

迭代器中的__next__方法可以乙個乙個的獲取值

4、for  迴圈其實就是在使用迭代器

iterator  :迭代器

5、關於for:只有是可迭代物件的時候,才能用for

當我們遇到乙個新的變數,不確定能不能用for迴圈的時候,就判斷它是否可以迭代

l=[1,2,3,4,5,6]

for i in l:

pass

iterator=l.__iter__() #iterator是l用__iterator

while true:

print(iterator.__next__())

6、迭代器的好處:

從容器型別中乙個乙個的取值,會把所有的值都取到。

節省記憶體空間:迭代器並不會在記憶體中再占用一大塊

記憶體,而是隨著迴圈,每次生成乙個,每次next迴圈每次給乙個值。

1、只要是含有yield關鍵字的函式都是生成器函式

yield不能和return 公用且需要寫在函式內

def

aaa():

print(222)

yield 111ret=aaa() #

ret 是執行之後返回得到的生成器

print

(ret)

print(ret.__next__())

2、含有yield  ,在執行之後會得到乙個生成器作為返回值

3、

#

娃哈哈%i

defwahaha():

for i in range(2000000):

yield

'娃哈哈%s

'%i #使用yield,執行之後返回值是乙個生成器函式

g =wahaha()

count =0 #計數功能:在執行50次之後停止

for i in

g:               #對 g 生成器進行迴圈

count +=1

print

(i)

if count > 50:

break #50次之後停止

#print('*******',g.__next__()) #停止之後執行__next__:繼續執行上一次50次停止的函式

#說明生成器是一次一次執行的

for i in

g:               #繼續迴圈執行生成器,還是接著上次執行:還是說明

count +=1              #生成器是一次一次執行的

print

(i)

if count > 100:

break

生成器 迭代器

最近見天一直在看廖大的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...