D4 迭代器和生成器

2021-07-23 09:55:40 字數 1539 閱讀 3431

一、迭代器(iterator):訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,

直到所有元素被訪問

完結束。迭代器只能前進不能後退,但實際應用時很少在迭代中後退。迭代器的一大優點是不需要

事先準備好整個迭代過程中的所有元素,僅在迭代到某個元素時

才計算該元素,在這之前或之後,元素可以不存在或被銷毀

。適合與遍歷一些巨大或

無限的集合。

宣告:

iter_1 =iter([1,2,3])
特點:

1、訪問者不需要關心迭代器內部的結構,僅需通過next()

方法不斷取得下乙個內容。

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

3、訪問到中途時

不能往回退。

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

應用舉例:檢視檔案

for

line

in f: #使用內建迭代器開啟檔案

print(line)

二、生成器(generator):乙個函式呼叫時返回乙個迭代器,那麼這個函式就叫做生成器。如果函式中包含yield語法,則這個函式就會變成生成器。

宣告:

def

cash_out

(amount):

while amount>0:

amount -= 100

yield

100#yield後的引數為每次迭代的返回值

print("get")

呼叫:

gen_1 = cash_out(500)

print(gen_1.__next__()) #可逐個獲取

yield可接收send方法傳來的值,用於單執行緒非同步程式執行時可在迭代器未執行完成時進行其他工作,之後從迭代器斷點處繼續執行,也可以隨意切入、切出迴圈。

生產者、消費者模型:

import time

defconsumer

(name):

print("[%s] is ready to buy goods"%name)

while

true:

goods = yield

#yield接收send函式傳來的值並賦值給goods變數

print("[%s] came,bought by [%s]"%(goods,name))

defproducer

(name):

c1 = consumer('a')

c2 = consumer('b')

c1.__next__()

c2.__next__()

print("start to ****** goods")

for i in range(5):

time.sleep(2)

c1.send(i)

c2.send(i)

producer('mumu')

生成器和迭代器

可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...

迭代器和生成器

1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...

生成器和迭代器

1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...