生成器跟迭代器

2022-05-06 09:12:08 字數 1524 閱讀 3041

import

time

deftest(name):

print('

\033[31;m%s已經準備好了,test:\033[0m

'%name)

while

true:

baozi=yield

print('

\033[31;m第%s包子來了,%s吃了\033[0m

'%(baozi,name))

def test1(*args):

c1=test('

逯曉華') #

指明c1,c2 只是乙個生成器

c2=test('袁珂'

) c1.

__next__

() c2.

__next__

()

print('

我要開始做了:')

for i in range(1,10):

c1.send(i)

c2.send(i)

if i%2==0:

print('

\033[31;m嗯,你倆一人一半\033[0m')

time.sleep(3)

test1('大廚

')#c1.__next__() 只是執行到yield

#c2 也是一樣

#在以後的for迴圈裡c1.__next__()起乙個給yield 賦值,並且再一次執行到 yield

#以後的每次迴圈都是這樣

view code

上面的是生成器的運用#

迭代器:

可以被for迴圈的稱謂可迭代物件(iterable) 例如:(列表,元素,集合)等等(list,tuple,dict,str)

可以用next的被稱為迭代器物件

列表轉換為迭代器物件用iter函式

list.iter

a=[1,2,3]

b=iter(a)

print(b.__next__

())print(b.__next__

())print(b.__next__())

view code

python的iterator ,iterator物件可以被next(),資料流可以看作乙個有序的數列,但我們卻不能知道他的長度

小結:凡可作用於for 迴圈的物件都是iterable型別

凡可以於next()函式的物件都是iterator物件,他表示乙個惰性計算序列

集合序列等可以通過iter 函式獲得乙個迭代器物件。

等價於for迴圈

it=iter([1,2,3,4])

while

true:

try:

x=next(it)

print

(x)

except

stopiteration:

#遇到stopiteration 錯誤就退出

break

view code

x獲得下乙個值

生成器 迭代器

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