一、生成器簡介
在python中,生成器是根據某種演算法邊迴圈邊計算的一種機制。主要就是用於操作大量資料的時候,一般我們會將操作的資料讀入記憶體中處理,可以計算機的記憶體是比較寶貴的資源,我認為的當要處理的資料超過記憶體四分之一的大小時就應該使用生成器。
二、生成器有什麼特點?
1.和傳統的容器相比,生成器更節省記憶體。
2.延遲計算,在我們需要結果時就呼叫一下生成器的next()方法即可。
3.可迭代,你可以像遍歷list一樣,遍歷生成器
三、如何建立生成器?
在python中有兩種方式建立生成器:生成器表示式 和 生成器函式。
生成器表示式
gen1 = (x for x in range(10))
生成器函式
生成式函式和普通函式只有乙個區別,普通函式使用return返回結果,而生成器函式使用yield返回結果。
yie程式設計客棧ld的特點在於,它並不是結束函式,而是在返回結果後將函式處於一種掛起狀態,等待再次next函式的呼叫,然後從上次掛起的地方(yield)繼續執行。
def gen():
a = 1
yield a
b = 2
yield b
c = 3
yield c
g = gen()
print(next(g))
print(next(g))
print(next(gqoeqrg))
print(next(g))
四、迭代器簡介
迭代器是乙個包含有限數量值的物件。
迭代器是乙個可以被迭代的物件,可以遍歷迭代器中的所有值。
從技術上講,在python中,迭代器是實現迭代器協議的物件,該協議由方法__iter和__next__()組成。
可迭代的資料型別
列表、元組、字典和集合都是可迭代的物件,可以從其中獲得迭代器。
所有這些物件都可用iter()方法獲取迭代器:
示例從元組中獲取乙個迭代器,遍歷並列印每個值:
mytuple = ("飛機", "汽車", "高鐵")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
五、建立迭代器
乙個物件要建立迭代器,變成可迭代的,必須實現方法:__iter__()和__next__()。
__iter__()方法必須始終返回迭代器物件本身。
__next__()方法必須返回序列中的下一項。
示例建立乙個返回數字的迭代器,從1開始,每個序列項遞增1(返回1、2、3、4、5等):
class mynumbers:
def
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = mynumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(mgqoeqryiter))
print(next(myiter))
本文標題: python 生成器和迭代器的原理解析
本文位址:
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...