Python學習之 迭代器 生成器

2022-08-22 05:09:11 字數 1567 閱讀 4983

迭代器是訪問集合元素的一種方式。從物件第乙個元素開始訪問,直到所有的元素被訪問結束。迭代器只能往前,不能往後退。迭代器與普通python物件的區別是迭代器有乙個__next__()方法,每次呼叫該方法可以返回乙個元素。

迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。適合遍歷一些巨大的或是無限的集合。

特點:

1 訪問者不需要關心迭代器內部的結構,僅需要通過next()方法去獲取下乙個內容

2 不能隨機訪問集合中的某個值,只能從頭到尾訪問

3 訪問到一半時不能回退

4 便於迴圈比較大的資料集合,省記憶體

l=iter([1,2,3])

>>> l=iter([1,2,3])

>>>l

>>> print(l.__next__

())1

>>> print(l.__next__

())2

>>> print(l.__next__

())3

>>> print(l.__next__

())traceback (most recent call last):

file

"", line 1, in

stopiteration

讀檔案的時候,採用for line in file:的形式,是按照迭代器的方式進行讀,比較節省記憶體。

乙個函式呼叫時返回乙個迭代器,那麼這個函式就叫做生成器。如果函式中包含

yield語法,那麼這個函式會變成生成器

def

cash_amount(amount):

while amount>0:

amount -=100:

yield 100

print("

又來取錢啦")

atm=cash_amount(500)

print(type(atm))

sample

生成器的好處可以讓你在執行函式的時候不必等到函式執行完畢。

例項、使用yield實現單執行緒中的非同步併發效果

應用-生產者消費者模型

def

consumer(name):

print("

%s 準備吃包子啦!

" %name)

while

true:

baozi=yield

print("

包子[%s]來了,被[%s]吃了!

" %(baozi,name))

defproducer(name):

c=consumer('a'

) c2=consumer('b'

) c.

__next__

() c2.

__next__

()

for i in range(10):

print("

%s 做好了2個包子!

" %name)

c.send(i)

c2.send(i)

producer(

'chef

')

code

Python之生成器 迭代器

利用 建立generator a x x for x in range 10 列表生成式 a 0,1,4,9,16,25,36,49,64,81 b x x for x in range 10 用 建立乙個generator b at 0x7f62455db258 next b 利用 next 呼叫...

python之迭代器 生成器

迭代器 迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器提供了統一的訪問集合的介面,只要定義 iter 方法物件,就可以使用迭代器訪問。迭代器有兩個基本的方法 iter 方法 返回迭代器物件本身 按我自己比較土的理解方法就是,每呼叫一次iter...

Python之生成器 迭代器

生成器類似返回值為陣列的乙個函式,這個函式可以接受引數,可被呼叫,但只能產生乙個值,所以大大節省記憶體。生成器表示式的語法非常簡單,只需要將列表推導式的中括號改成小括號就可以了 1 x x for x in range 10 if x 2 0 會列印出整個列表 0,4,8,12,16 1 x x f...