python中的迭代器和生成器

2021-10-04 11:40:33 字數 2560 閱讀 4381

一、迭代器

迭代器可以理解為是乙個容器,每次從容器中取出乙個資料,就是迭代操作,列表元組字串和字典都是迭代器,也都支援迭代操作。

迭代器有兩個基本的方法:

iter() :對乙個容器物件呼叫iter()就得到它的迭代器。

next():呼叫 next()迭代器就會返回下乙個值,如果沒有值返回了就會丟擲乙個stopiteration的異常。

>>

> str1 =

'laohu'

>>

>

>>

> data =

iter

(str1)

>>

>

>>

>

next

(data)

'l'>>

>

>>

>

next

(data)

'a'>>

>

>>

>

next

(data)

'o'>>

>

>>

>

next

(data)

'h'>>

>

>>

>

next

(data)

'u'>>

>

>>

>

next

(data)

traceback (most recent call last)

: file ""

, line 1,in

next

(data)

stopiteration

把乙個類作為迭代器需要在類中實現兩個方法

iter()::需要返回物件本身

next():返回容器中的下乙個元素,當資料取完時,要引發乙個stopiteration異常。

>>

>

#自定義迭代器,通過傳入最小值和最大值,返回該範圍內所有數值的平方。

>>

>

>>

>

class

number()

:def

__init__

(self,

min,

max)

: self.

min=

min self.

max=

maxdef

__iter__

(self)

:return self

def__next__

(self)

: num = self.

minif self.

min<= self.

max:

self.

min+=

1return num **

2else

:raise stopiteration

>>

>

for i in number(1,

7):print

(i,end=

'--')1

--4-

-9--

16--25

--36-

-49--

二、生成器

python中函式如果包含了yield關鍵字,那麼這個函式就不再是乙個普通函式,而是乙個生成器(generator)

生成器就是乙個迭代器,在呼叫生成器的過程中,每次遇到 yield 時函式會暫停並儲存執行資訊,並在下次執行 next() 方法時從當前位置繼續執行

>>

>

deftest_gene()

:print

('test generator'

)yield

'h'yield

'j'yield

'y'>>

> my_gene = test_gene(

)>>

>

>>

>

next

(my_gene)

test generator

'h'>>

>

next

(my_gene)

'j'>>

>

next

(my_gene)

'y'>>

>

next

(my_gene)

traceback (most recent call last)

: file ""

, line 1,in

next

(my_gene)

stopiteration

>>

>

yield 與 return 的區別:

a、return 語句執行後,會跳出當前函式,yield 不會。

b、yield 會儲存當前的執行狀態,再次呼叫會從上次暫停的位置繼續執行。

python中迭代器和生成器

迭代器 迭代器的實質是實現了next 方法的物件,常見的元組 列表 字典都是迭代器。迭代器中重點關注兩種方法 iter 方法 返回迭代器自身。可以通過python內建函式iter 呼叫。next 方法 當next方法被呼叫的時候,迭代器會返回它的下乙個值,如果next方法被呼叫,但迭代器沒有只可以返...

python中迭代器和生成器

1 迭代器 iterator 是乙個實現了迭代器協議的物件,python的一些內建資料型別 列表,陣列,字串,字典等 都可以通過for語句進行迭代,我們也可以自己建立乙個容器,實現了迭代器協議,可以通過for,next方法進行迭代,在迭代的末尾,會引發stopiteration異常。迭代器有兩個基本...

python中迭代器和生成器

這裡的迭代可以指for迴圈,在python中,對於像list,dict和檔案等而言,都可以使用for迴圈,但是它們並不是迭代器,它們屬於可迭代物件。1.1什麼可迭代物件 最簡單的解釋 可以使用for.in.語句進行迴圈的物件,就是可迭代物件 iterable 可以使用isinstance 方法進行判...