個人理解的python中生成器與迭代器

2021-08-22 17:53:49 字數 1502 閱讀 9756

可迭代物件:在python中,列表,元組,字典,字串這些可以用for迴圈遍歷的物件稱為可迭代物件。

迭代器:我們建立乙個容器,該容器中可以生成一些資料,這些資料可以遍歷,該容器被我們稱為迭代器。

生成器:生成器為迭代器的一種,使用yield返回函式,每次呼叫yield函式程式都會暫停,使用next()或send()函式恢復程式進行。

通過列表等python一些內建資料函式生成,我們可以直接建立乙個可遍歷物件,但是,受到記憶體限制,我們在建立乙個很大的資料時,如果要把資料全部建立出來再進行操作,就會占用很大的記憶體,這樣的設計方式是很不友好的,程式的使用效能也會大打折扣,因此,我們需要建立乙個迭代器,讓我們需要哪個資料就建立哪個資料,不用一下子把資料全部建立出來,從而能節省大量空間。

1 為容器物件新增__iter__()和__next__()方法,__iter__()返回迭代器物件本身,__next__()返回每次呼叫next()或迭代時的元素

舉例如下:

class generator():

def __init__(self,start = 0,end = 0):

self.start = start

self.end = end

def __iter__(self):

print("建立乙個迭代器")

return self

def __next__(self):

print("呼叫next方法")

if self.start < self.end:

i = self.start

self.start += 1

return i

else:

raise stopiteration()

ex = generator(1,10)

for i in ex:

print(i)

執行結果如下:

建立乙個迭代器

呼叫next方法

1呼叫next方法

2呼叫next方法

3呼叫next方法

4呼叫next方法

5呼叫next方法

6呼叫next方法

7呼叫next方法

8呼叫next方法

9呼叫next方法

2 使用內建函式iter()函式將可迭代物件轉換為迭代器

舉例如下

for i in iter(range(10)):

print(i)

3 生成器,使用yield函式建立乙個迭代器,

斐波那契數列

def fib(max):

n,a,b =0,0,1

while n < max:

yield b

a,b =b,a+b

n = n+1

return 'done'

a = fib(10)

print(fib(10))

python中生成器

生成器 生成器generator 生成器函式generator m i for i in range 5 定義乙個生成器 print type m 判斷m的型別,是乙個生成器 print next m 使用next函式 def inc 定義乙個inc函式 for i in range 5 yield...

python中生成器yield

def yield demo for x in range 3 yield x print 生成器後一行 a yield demo print a 這裡的a是乙個生成器物件 可以用for迴圈來遍歷生成器物件裡的元素 for i in a print i 那麼yield的工作過程是怎麼樣的呢?可以通過...

python中生成器的使用

在python中我們常聽到迭代器和生成器,但是本人分開來介紹,只為告訴大家迭代器和生成器不是乙個東西,在上篇文章中我們詳細的介紹過迭代器和可迭代物件,本章重點介紹生成器。對於呼叫乙個普通的python函式,一般是從函式的第一行 開始執行,結束於return語句 異常或者函式所有語句執行完畢。一旦函式...