python學習--產生器Generator

來源:互聯網
上載者:User

標籤:key   學習   bsp   遇到   關鍵字   並且   code   __next__   跟蹤   

產生器函數:在函數中如果出現了yield關鍵字,那麼這個函數就是產生器函數,yield的作用就是產生一個generator,產生器函數返回一個產生器。

實現一個generator:1、把列表的[ ]換成(),就建立了一個generator。

>>> L = [x * x for x in range(10)]>>> L[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> g = (x * x for x in range(10))>>> g<generator object <genexpr> at 0x1022ef630>

方式2、通過yield關鍵字。如果一個函數定義中包含yield關鍵字,那麼這個函數就不再是一個普通函數,而是一個generator。
產生器實現了__iter__方法和next()方法。產生器是可迭代對象,也是迭代器。可以作用於for迴圈。

在Python中構建迭代器有很多開銷; 必須使用__iter__()__next__()方法實現一個類,跟蹤內部狀態,當沒有值被返回時引發StopIteration異常。

Python產生器是建立迭代器的簡單方法。

1、調用產生器函數,返回一個產生器。

2、調用產生器的next()方法時,產生器才開始執行產生器函數,直到遇到yield時暫停執行(掛起),並且yield的參數將作為此次next方法的傳回值。

3、之後每次調用產生器的next方法,產生器將從上次暫停執行的位置恢複執行產生器函數,直到再次遇到yield時暫停,並且同樣的,yield的參數將作為next方法的傳回值。

 

python學習--產生器Generator

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.