迭代器,生成器

2022-06-12 14:27:10 字數 1690 閱讀 2586

可迭代物件

dir(xx) 可以檢視xx資料型別是否有 __iter__(),iterable()方法

所有有__iter__()方法都可以使用for迴圈,都是可迭代物件,可迭代物件可以使用__iter__()方法獲取到迭代器

迭代器有 __iter__()方法 ,__next__方法

迭代器的特點: 1.惰性機制 2.幾乎不占用記憶體3.只能向前 4可以使用for迴圈

*********注意for迴圈底層就是使用迭代器*****************

lst = ["

趙一寧", "

石可心", "

朱奎峰", "

姚明","

潘長江"

]it = lst.__iter__() #

獲取迭代器

while 1:

try: #

嘗試執行

el = it.__next__() #

獲取下乙個元素

print

(el)

except stopiteration: #

處理錯誤

break

生成器:

def

func():

print("

娃哈哈"

)

yield 1 #

return和yield都可以返回資料

print("

呵呵呵"

)gen = func() #

不會執行你的函式. 拿到的是生成器

函式中如果有yield 這個函式就是生成器函式. 生成器函式() 獲取的是生成器. 這個時候不執行函式

yield

: 相當於return 可以返回資料. 但是yield不會徹底中斷函式. 分段執行函式.

gen.

__next__

() 執行函式. 執行到下乙個yield.

gen.

__next__() 繼續執行函式到下乙個yield.

def

order():

for i in range(10000):

yield"衣服

"+str(i)

g = order() #

獲取生成器

mingwei = g.__next__

()print

(mingwei)

zhaoyining = g.__next__

()print(zhaoyining)

元組推導式也是生成器.

tu = (i for i in range(10)) # 沒有元組推導式.  只有生成器表示式
# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

# print(tu.__next__())

生成器 迭代器

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