迭代器,生成器

2021-09-26 08:25:13 字數 1090 閱讀 5277

迭代器(iterator)

從本質上來說,迭代是重複反饋過程的活動,其目的是接近所需要的目標和結果,每一次重複稱為一次迭代,每一次迭代得到的結果稱為下一次迭代的初始值。定義

模擬一下for迴圈的實現

lst=[1,2,3,4,5]

l=lst.__iter__()#將可迭代物件轉為迭代器

while true:

try:

print(l.__next__())

except stopiteration:

break

迭代器:

優點:節省記憶體,惰性機制(典型以時間換空間)

缺點:一次性的(用完就沒有了),不能逆行(不能後退)

生成器(generator)

坑:#這樣會導致每次都重新建立新的生成器,從第乙個yield遍歷

def func():

yield 1

yield 2

func() # 生成乙個生成器

print(func().__next__()) # 這樣會一直重新建立生成器,不斷輸出1

print(func().__next__())

解決方法:這樣建立一次,就可以了

g=func()

print(next(g))

print(next(g))

總結:

在函式中將return改寫成yield就是乙個生成器

yield 和 return 的區別

相同點:

1.都是返回內容

2.都可以返回對個,但是return寫多個只會執行乙個

不同點:

1.return 終止函式 yield是暫停生成器

2.yield能夠記錄當前執行位置

乙個__next__() 對應乙個yield

生成器可以使用for迴圈獲取值

yield from – 將可迭代物件元素逐個返回

在函式的內部 yield 能將for迴圈和while迴圈進行臨時暫停

yield返回是迭代器物件

yield from返回的是迭代器物件中每乙個元素

生成器 迭代器

最近見天一直在看廖大的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...