Python迭代器和生成器

2021-10-03 16:57:10 字數 1572 閱讀 5321

可迭代物件,顧名思義,即該物件可迭代,與迭代器的區別在於,物件內部未實現__next__的方法,僅僅實現了__iter__的方法,而迭代器中兩者均有實現。

可使用函式 isinstance(物件名,iterable)來判斷是否為可迭代物件。

迭代器與可迭代物件的區別在於,其中內部實現了__next__的方法,next方法用於定製for迴圈時具體的返回值及返回順序以及處理stopiteration異常等。迭代器中next方法與iter方法必須同時存在,不可分割,iter相當於可迭代的標識。

可使用函式isinstance(物件名,iterator)判斷是否為迭代器。

迭代器常用函式有:iter(obj) 和 next(),其中iter為建立乙個迭代器物件,傳入的物件一般為可迭代物件,如列表, 字串等等,next()函式為輸出迭代器中的元素,且只能往前不能退後。

自己建立迭代器實現斐波那契數列,例子:

class

myiter

:def

__iter__

(self)

: self.a =

0 self.b =

1return self

def__next__

(self)

:if self.a <=20:

self.a, self.b = self.b, self.b+self.a

return self.a

else

:raise stopiteration

a = myiter(

)for each in a:

print

(each)

在python中,使用了 yield 的函式被稱為生成器(generator), 它是可以返回乙個迭代器的函式。功能是:在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

用生成器來實現斐波那契數列例子:

import sys

deffibo

(n):

# 生成器函式 - 斐波那契

a, b, count =0,

1,0while

true:if

(count > n)

:raise stopiteration

yield a #每次遇到yield函式暫停,返回a,在下一次呼叫next時,從下面的語句繼續執行

a, b = b, a + b

count +=

1f = fibo(20)

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

while

true

:try

:print

(next

(f), end=

" ")

except stopiteration:

sys.exit(

)

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...

Python迭代器和生成器

迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...

python 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...