迭代器和生成器

迭代意味着重複屢次,是實現了__iter__的對象,包含了__next__方法函數

當調用__next__時迭代器返回下一個值,若是沒有可供返回的值,引起StopTteration異常,也能夠使用等價的next()函數spa

nest(it)等效於__next__(it)code

實現了方法__iter__的對象是可迭代的,實現了__next__的對象是迭代器對象

 

***************************************************************************************************blog

生成器是一種使用普通函數語法定義的迭代器element

經過一個例子來講明it

nested = [[1, 2], [3, 4], [5, 6]]
def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element
#包含yield語句函數都被成爲生成器
#生成器不使用return返回值,而是能夠生成多個值,每次一個
#每次使用yield生成一個值後函數都將被凍結,等待從新喚醒
#被喚醒後,從中止的地方從新開始執行

for num in flatten(nested):
    print(num)

生成器由兩個單獨的部分組成:生成器函數和生成器的迭代器,生成器的函數由def定義,其中包含yield;生成器的迭代器是這個函數的返回結果io

生成器方法:class

send() 在外部世界向生成器發送一個參數yield

throw   用於在yield處引起異常,可提供一個異常類型,一個可選值和一個traceback對象

close   用於中止生成器,無需提供參數

相關文章
相關標籤/搜索