Python_生成器(generator)

generator與list比較

  • generator:算法實(shí)現(xiàn)下一個(gè)數(shù)據(jù)的輸出,不調(diào)用下一個(gè),就不執(zhí)行下一個(gè)數(shù)據(jù)的運(yùn)算
  • list:直接存儲(chǔ)于內(nèi)存,所有數(shù)據(jù)都同時(shí)存在
  • generator相較于list占用內(nèi)存小

創(chuàng)建一個(gè)簡(jiǎn)單的generator

  • 簡(jiǎn)單的generator的創(chuàng)建:在列表生成式的基礎(chǔ)上將[]改為()
    例如:
g=(x*x for x in range(10))
  • generator的調(diào)用
    • next調(diào)用:(直到報(bào)錯(cuò)結(jié)束)
    >>> g=(x*x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x0610BC00>
    >>> next(g)
    0
    >>> 
    >>> next(g)
    1
    >>> next(g)
    4
    >>> next(g)
    9
    >>> next(g)
    16
    >>> next(g)
    25
    >>> next(g)
    36
    >>> next(g)
    49
    >>> next(g)
    64
    >>> next(g)
    81
    >>> next(g)
    Traceback (most recent call last):
      File "<pyshell#14>", line 1, in <module>
        next(g)
    StopIteration
    
    • for循環(huán)調(diào)用:
    >>> def g_get():
            for n in g:
                print(n)
    
    >>> g=(x*x for x in range(10))
    >>> g_get()
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
    

創(chuàng)建一個(gè)函數(shù)形式的generator

  • 函數(shù)型的generator的創(chuàng)建:
    與普通函數(shù)不同的是含有關(guān)鍵字yield,即含有yield的函數(shù)就是generator
 >>> def yhsj():
    L=[1]
    while True:
        yield L
        L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

      
>>> def get_yhsj():
    for n in yhsj():
        print(n)

      
>>> get_yhsj()
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
...

函數(shù)型的generator與普通函數(shù)的不同

  • 除了含有yield關(guān)鍵字外,還有就是執(zhí)行順序不同,普通函數(shù)的執(zhí)行是按順序的,而generator是執(zhí)行到y(tǒng)ield語(yǔ)句就停止,知道下一次調(diào)用,執(zhí)行接下來(lái)的語(yǔ)句
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 我們可以通過(guò)列表生成式簡(jiǎn)單直接地創(chuàng)建一個(gè)列表,但是受到內(nèi)存限制,列表容量肯定是有限的。而且,創(chuàng)建一個(gè)包含100萬(wàn)個(gè)...
    PyChina閱讀 2,904評(píng)論 0 3
  • 1.生成器(generator)概念 生成器是迭代器,生成器提供了非常方便的自定義迭代器的途徑,在Python中,...
    Pello_Luo閱讀 887評(píng)論 0 0
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,243評(píng)論 0 38
  • 你舞姿驚艷,那只是當(dāng)年 你筆落驚天,我已看不見 最后的一眼,相隔已久遠(yuǎn) 我送你的信書,你沒(méi)給我回復(fù) 我對(duì)你的付出,...
    驚濤的詩(shī)閱讀 298評(píng)論 0 5
  • 文/ 素智 1. 喜歡上杰的那一年,我15歲。 那年我們初三,除了努力學(xué)習(xí)考上一個(gè)差不多的學(xué)校,我還有一個(gè)更重要的...
    素智閱讀 962評(píng)論 29 24

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