可迭代物件:在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語句 異常或者函式所有語句執行完畢。一旦函式...