Python——生成器(1)

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

  • 創(chuàng)建生成器
  1. 只要把一個列表生成式的[]改成(),就創(chuàng)建了一個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)建生成器的兩種方法,接下來的系列會讓大家對生成器有更深的了解以及它的作用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容