生成器,叠代器,可叠代對象
Python中 list,truple,str,dict這些都可以被叠代,但他們並不是叠代器。
可叠代對象使用iter()函數後就變成了一個叠代器
比如說str類型,它可以叠代,但是他不是一個叠代器,使用iter(str)可以把str類型轉換成str_iter類型的叠代器.(同理,list會變成list_iter)
叠代器可以調用next()函數(或者.__next__()方法,效果一致),參數為其本身,獲取下一次叠代的值.
--------------------------------------------------------------------------------------------------------------------------------------------
生成器:(yield,生產,產生的意思),生成器一定是叠代器,反之不成立.
a = [x*x for x in range(10)] 是列表生成式,返回列表
如果我要生成的列表很大很大,占用內存空間,一次性生成不太現實,那麽我就需要使用生成器
a = (x*x for x in range(10)) 生成器表達式(generator expression)
使用next(a)一次只生成一個值
生成器可以再函數中加入yield關鍵字,後面接一變量名實現,把這個函數變成生成器,比如一個實現斐波那契數列的函數,節省內存空間
每次調用這個函數後會執行到yield行,返回變量值.函數停止,下次再調用這個函數會從上次中斷的地方繼續執行到下個yield處.如此反復.
要註意的是 yield 並沒有返回值,如果
temp = yield a
temp一直是為None的
要使yield有返回值,請使用生成器的.send(參數)方法
send()方法不能在還沒開始叠代的時候傳遞non-None參數
生成器,叠代器,可叠代對象