Python之生成器 迭代器

2022-08-11 21:57:14 字數 1574 閱讀 6773

生成器類似返回值為陣列的乙個函式,這個函式可以接受引數,可被呼叫,但只能產生乙個值,所以大大節省記憶體。

生成器表示式的語法非常簡單,只需要將列表推導式的中括號改成小括號就可以了

1 [x+x for x in range(10) if x%2==0]#

會列印出整個列表

[0, 4, 8, 12, 16]
1 (x+x for x in range(10) if x%2==0)#

按某種程式規則儲存起來,只隱士的顯示出來

at 0x7fbb230ebe50>

呼叫生成器的方法也非常簡單,用迴圈直接打出即可,或用next()函式列印單個元素。但是生成器裡的物件只能被讀取一次,就會從記憶體中消失。

1 g=(x+x for x in range(10) if x%2==0)

2for i ing:3

print(i)

048

1216

嘗試第二次列印

1

for i ing:2

print(i)#

因為被讀取過,所以列印為空

next()獲取

1 c=(x+x for x in range(10) if x%2==0)

2 next(c)

1 next(c)

直到呼叫最後乙個物件之後再用next() 會出現stopiteration的報錯。

1、協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具(如for迴圈,sum,min,max函式等)使用迭代器協議訪問物件

(實際for語句的內部實現應該就是首先呼叫物件的__iter__方法,獲取乙個迭代器物件,接著不停的呼叫迭代器物件的__next__方法,迴圈遍歷取值。)

2、可迭代物件:簡單來講可用for迴圈的物件,如list、dict、set等都是可迭代的物件。

3、迭代器協議是指:物件必須提供乙個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起乙個stoplteration報錯,最後結束迭代。

4、可迭代物件可通過iter()函式轉化成迭代器

1 a=iter(list("

python

"))#

用iter(可迭代物件)建立迭代器

2 a

next(a)

'p'

總結:1、簡單來講能被for作用迴圈的我們可以視為可迭代的物件(iterable),生成器(generator)、迭代器(iterator)、list、set等都為可迭代的物件。

2、能被next( )作用的物件我們稱之迭代器。我們可知生成器也能被next( )呼叫,其實生成器是特殊的迭代器。

3、為什麼有些可迭代物件不是迭代器,因為迭代器的實質是資料流,是惰性的,(我自己理解為待推到多公尺骨諾牌),所以迭代器可以用next()乙個個啟用其中的物件。

4、生成器、迭代器、可迭代的物件三者關係可理解為:生成器《迭代器《可迭代的物件

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

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...