Python3 迭代器與生成器

2021-10-09 03:18:12 字數 3756 閱讀 2813

迭代是python最強大的功能之一,是訪問集合元素的一種方式。

迭代器是乙個可以記住遍歷的位置的物件。

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

迭代器有兩個基本的方法:iter()和 next()。

字串,列表或元組物件都可用於建立迭代器:

例項(python 3.0+)

>>

>list=[1

,2,3

,4]>>

> it =

iter

(list) # 建立迭代器物件

>>

> print (

next

(it)

) # 輸出迭代器的下乙個元素

1>>

> print (

next

(it))2

>>

>

迭代器物件可以使用常規for語句進行遍歷:

例項(python 3.0+)

#!

/usr/bin/python3

list=[1

,2,3

,4]it =

iter

(list) # 建立迭代器物件

for x in it:

print

(x, end=

" ")

執行以上程式,輸出結果如下:

123

4

也可以使用 next() 函式:

例項(python 3.0

+)

#!

/usr/bin/python3

import sys # 引入 sys 模組

list=[1

,2,3

,4]it =

iter

(list) # 建立迭代器物件

while true:

try:

print (

next

(it)

) except stopiteration:

sys.

exit

()

執行以上程式,輸出結果如下:

1234
把乙個類作為乙個迭代器使用需要在類中實現兩個方法__iter__()與__next__()。

如果你已經了解的物件導向程式設計,就知道類都有乙個建構函式,python 的建構函式為__init__(), 它會在物件初始化的時候執行。

iter()方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了__next__()方法並通過 stopiteration 異常標識迭代的完成。

next()方法(python 2 裡是next())會返回下乙個迭代器物件。

建立乙個返回數字的迭代器,初始值為 1,逐步遞增 1:

例項(python 3.0+)

class mynumbers:  

def __iter__

(self)

:

self.a =

1return self

def __next__

(self)

:

x = self.a

self.a +=1

return x

myclass =

mynumbers()

myiter =

iter

(myclass)

print

(next

(myiter)

)print

(next

(myiter)

)print

(next

(myiter)

)print

(next

(myiter)

)print

(next

(myiter)

)

執行輸出結果為:

12345
stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況,在__next__()方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代。

在 20 次迭代後停止執行:

例項(python 3.0+)

class mynumbers:  

def __iter__

(self)

:

self.a =

1return self

def __next__

(self)

:if self.a <=

20:

x = self.a

self.a +=1

return x

else

:

raisestopiteration

myclass =

mynumbers()

myiter =

iter

(myclass)

for x in myiter:

print

(x)

執行輸出結果為:

123

4567

891011

1213

1415

1617

1819

20

在 python 中,使用了yield的函式被稱為生成器(generator)。

跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

呼叫乙個生成器函式,返回的是乙個迭代器物件。

以下例項使用 yield 實現斐波那契數列:

例項(python 3.0+)

#!

/usr/bin/python3

import sys

def fibonacci

(n): # 生成器函式 - 斐波那契

a, b, counter =0,

1,0while true:

if(counter > n)

:return

yield a

a, b = b, a + b

counter +=1

f =fibonacci(10

) # f 是乙個迭代器,由生成器返回生成

while true:

try:

print (

next

(f), end=

" ")

except stopiteration:

sys.

exit

()

執行以上程式,輸出結果如下:

011

2358

1321

3455

Python3 迭代器與生成器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1 2,3 ...

python3 迭代器與生成器

生成器yield 在python中,使用了yield的函式被稱為生成器 generator 跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。在呼叫生成器的執行過程中,每次遇到yield時函式會暫停並儲存當前所有執行資訊,返回yield的值。並在下...

Python3 迭代器與生成器

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。使用iter 定義迭代器,使用next 訪問迭代器的下乙個元素。當迭代器中沒有下乙個元素時,繼續使用next 則會丟擲stopiteration異常。author timax liu import sys 宣告迭代器兩種方式 iter...