python中Genarator函數用法分析

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

Generator函數的定義與普通函數的定義沒有什麼區別,只是在函數體內使用yield產生資料項目即可。Generator函數可以被for迴圈遍曆,而且可以通過next()方法獲得yield產生的資料項目。

def func(n):   for i in range(n):    yield i for i in func(3):  print i r=func(3) print r.next() print r.next() print r.next() print r.next()

運行結果如下:

012012Traceback (most recent call last): File "generator.py", line 10, in   print r.next()StopIteration

yield保留字與return 語句的傳回值和執行原理都不相同。yield產生值並不會中止程式的執行,傳回值後程式繼續往後執行。return 傳回值後,程式將中止執行。

Generator函數一次只返回一個資料項目,佔用更少的記憶體。每次產生資料都要記錄當前的狀態,便於下一次產生資料。

當程式需要較高的效能或一次只需要一個值進行處理時,使用generator函數。當需要擷取一次性一組元素的值時,使用序列。

函數裡只要有了yield,這個函數就會被編譯成一個generator 函數。generator函數object支援python iterator protocol。 每次調用這個對象的next,generator函數就執行到yield,擷取到yield產生的值。如果函數返回,就拋出一個異常。這裡有個概念就是generator 函數使用yield產生一個值,而不是返回一個值。產生之後函數還沒結束,返回了函數就結束了。

>>> x = gensquares(5)>>> print x>>> print x.next()0>>> print x.next()1>>> print x.next()4>>> print x.next()9>>> print x.next()16>>> print x.next()Traceback (most recent call last): File "", line 1, in ?StopIteration>>>

希望本文所述對大家的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.