迭代器是訪問集合元素的一種方式。從物件第乙個元素開始訪問,直到所有的元素被訪問結束。迭代器只能往前,不能往後退。迭代器與普通python物件的區別是迭代器有乙個__next__()方法,每次呼叫該方法可以返回乙個元素。
迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。適合遍歷一些巨大的或是無限的集合。
特點:
1 訪問者不需要關心迭代器內部的結構,僅需要通過next()方法去獲取下乙個內容
2 不能隨機訪問集合中的某個值,只能從頭到尾訪問
3 訪問到一半時不能回退
4 便於迴圈比較大的資料集合,省記憶體
l=iter([1,2,3])讀檔案的時候,採用for line in file:的形式,是按照迭代器的方式進行讀,比較節省記憶體。>>> 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
乙個函式呼叫時返回乙個迭代器,那麼這個函式就叫做生成器。如果函式中包含
yield語法,那麼這個函式會變成生成器
defsamplecash_amount(amount):
while amount>0:
amount -=100:
yield 100
print("
又來取錢啦")
atm=cash_amount(500)
print(type(atm))
生成器的好處可以讓你在執行函式的時候不必等到函式執行完畢。
例項、使用yield實現單執行緒中的非同步併發效果
應用-生產者消費者模型
defcodeconsumer(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
')
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...