Python的生成器和迭代器

2021-08-24 23:14:45 字數 1043 閱讀 6939

前面有列表解析式,集合解析式,字典解析式,唯獨沒有元組解析式,這是因為元組的小括號 ( ) ,被用來做生成器了。

( 返回值 for 元素 in 可迭代物件 if 條件 )

通過生成器表示式,我們就建立了乙個生成器,所說的生成器,就是不斷地生產出我們需要的資料。

但是要注意,生成器裡面儲存的是所需資料的演算法,而不是資料:

g = (i for i in range(5))

gat 0x00000214b0effe08>

#生成器物件,genexpr裡面是generator expression的縮寫,後面at是指出存在**

如果需要生成器計算出乙個資料並返回,需要手動操作並返回,此時需要乙個next()函式。

next(g)

0next(g)

1....

next(g)

4next(g)

#會報錯,stopiteration

我們建立的這個生成器g,只能使用5次,之後再使用就會報錯stopiteration,就是說迭代停止了,這說明什麼?

說明乙個生成器只能依次生產資料,如果內部演算法可以得出的資料都生產完了,那麼這個生成器就結束了他的使命,要想再次使用,得重新定義,也就是重新做乙個生成器。

如果需要生成器生成全部的資料,需要用for迴圈來迭代,因為生成器都是迭代器iterator,但是一定要注意,迭代器不一定是生成器。

g = (i for i in range(5))

for i in g:

print(i)

#迭代一遍這個生成器,此時它作為乙個迭代器,行駛的是迭代器的功能,列印生產出的資料。

print('........................') #分隔一下

for i in g:

print(i+1) #想再迭代一遍這個生成器(迭代器),列印i+101

234........................

可以看出,這個生成器只能使用一次,一旦演算法沒有資料可以生產了,就停止。

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 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...