Python——生成器(1)

一個(gè)普通的函數(shù)調(diào)用一般是這樣的,從第一行代碼開始執(zhí)行,直到最后一行代碼結(jié)束(中間有可能會(huì)遇到return,異常等會(huì)提前結(jié)束)。對(duì)于我們而言,這是一個(gè)再正常不過的函數(shù)標(biāo)準(zhǔn)執(zhí)行流程,它只能返回一個(gè)至或者隱式的返回None。不過,有時(shí)可以創(chuàng)建能產(chǎn)生一個(gè)序列的函數(shù)還是有幫助的。例如,通過列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但是,受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含100萬個(gè)元素的列表,不僅占用很大的存儲(chǔ)空間,如果我們僅僅需要訪問前面幾個(gè)元素,那后面絕大多數(shù)元素占用的空間都白白浪費(fèi)了。所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環(huán)的過程中不斷推算出后續(xù)的元素呢?這樣就不必創(chuàng)建完整的list,從而節(jié)省大量的空間。在Python中,擁有這種能力的“函數(shù)”被稱為生成器(generator )

  • 創(chuàng)建生成器
  1. 只要把一個(gè)列表生成式的[]改成(),就創(chuàng)建了一個(gè)generator
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x1022ef630>

  2. 任何包含yield語句的函數(shù)

     def flatten(nested):
      for sublist in nested:
           for element in sublist
                 yield element 
    

這篇主要簡單介紹了下生成器以及怎么創(chuàng)建生成器的兩種方法,接下來的系列會(huì)讓大家對(duì)生成器有更深的了解以及它的作用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容