迭代意味着重複屢次,是實現了__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 用於中止生成器,無需提供參數