python產生器generator用法執行個體分析

來源:互聯網
上載者:User
本文執行個體講述了python產生器generator用法。分享給大家供大家參考。具體如下:

使用yield,可以讓函數產生一個結果序列,而不僅僅是一個值

例如:

def countdown(n):   print "counting down"   while n>0:     yield n #產生一個n值     n -=1 >>> c = countdown(5) >>> c.next() counting down 5 >>> c.next() 4 >>> c.next() 3 

next()調用產生器函數一直運行到下一條yield語句為止,此時next()將傳回值傳遞給yield.而且函數將暫停中止執行。再次調用時next()時,函數將繼續執行yield之後的語句。此過程持續執行到函數返回為止。

通常不會像上面那樣手動調用next(), 而是使用for迴圈,例如:

>>> for i in countdown(5): ...   print i ...   counting down 5 4 3 2 1 

next(), send()的傳回值都是yield 後面的參數, send()跟next()的區別是send()是發送一個參數給(yield n)的運算式,作為其傳回值給m, 而next()是發送一個None給(yield n)運算式, 這裡需要區分的是,一個是調用next(),send()時候的傳回值,一個是(yield n)的傳回值,兩者是不一樣的.看輸出結果可以區分。

def h(n):   while n>0:     m = (yield n)     print "m is "+str(m)     n-=1     print "n is "+str(n) >>> p= h(5) >>> p.next() 5 >>> p.next() m is None n is 4 4 >>> p.send("test") m is test n is 3 3 

希望本文所述對大家的Python程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.