迭代器 生成器

2021-10-01 03:20:38 字數 1505 閱讀 3732

**迭代器:**用於迴圈

>>> a=[1,2,3]

>>> a=iter(a) #把列表a轉為迭代器

>>> next #內建函式

>>> next(a) #next() 呼叫迭代

1>>> next(a)

2>>> next(a)

3>>> next(a) #超出迭代範圍,停止迭代

traceback (most recent call last):

file "", line 1, in stopiteration

**生成器:**不能用類來實現,通過函式來實現

前後有下劃線的都是內建函式,

defiter(self): #先定義乙個迭代

defnext(self): #定義下乙個生成什麼

>>> a=(i for i in range(3))

>>> type(a)

>>> next(a) #生成器、迭代器都可以用next()

0>>> next(a)

1>>> next(a)

2>>> next(a)

traceback (most recent call last):

file "", line 1, in stopiteration #越界,沒有可迭代物件

>>>

yield 是乙個類似 return 的關鍵字,迭代一次遇到yield時就返回yield後面(右邊)的值。重點是:下一次迭代時,從上一次迭代遇到的yield後面的**(下一行)開始執行。return 的作用:如果沒有 return,則預設執行至函式完畢,返回的值一般是yield的變數。

>>> def a():			#生成器

... yield 1

... yield 2

... yield 3

...>>> next(a())

1>>> next(a())

1>>> next(a())

1>>> b=a()

>>> next(b)

1>>> next(b)

2>>> next(b)

3

迭代器:可以用在類裡

通過實現迭代器協議對應的__iter__()和__next__()方法,可以自定義迭代器型別。對於可迭代物件,for語句可以通過iter()方法獲取迭代器,並且通過next方法獲得容器的下乙個元素。

生成器:不可以用在類裡,可以用在函式裡

生成器是一種特殊的迭代器,內部支援了生成器協議,不需要明確定義__iter__() 和__next__()方法。

生成器通過生成器函式產生,生成器函式可以通過常規的def語句來定義,但是不用return返回,而是用yield一次返回乙個結果。

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...