python 基礎篇 13 迭代器與產生器

來源:互聯網
上載者:User

標籤:衣服   png   range   tuple   ext   包括   地方   建立   哪些   

13. 前??能-迭代器和?成器
本節主要內容:
1. 迭代器
2. ?成器

?. 迭代器
我們之前?直在?可迭代對象進?迭代操作. 那麼到底什麼是可迭代對象. 本?節主要討
論可迭代對象. ?先我們先回顧?下?前我們所熟知的可迭代對象有哪些:
str, list, tuple, dict, set. 那為什麼我們可以稱他們為可迭代對象呢? 因為他們都遵循了可
迭代協議. 什麼是可迭代協議. ?先我們先看?段錯誤碼:

 

 

注意看報錯資訊中有這樣?句話. ‘int‘ object is not iterable . 翻譯過來就是整數類型對象
是不可迭代的. iterable表?可迭代的. 表?可迭代協議. 那麼如何進?驗證你的資料類型是否
符合可迭代協議. 我們可以通過dir函數來查看類中定義好的所有?法.

我們發現在字串中可以找到__iter__. 繼續看?下list, tuple, dict, set

 我們發現這?個可以進?for迴圈的東?都有__iter__函數, 包括range也有. 可以??試?
下.
綜上. 我們可以確定. 如果對象中有__iter__函數. 那麼我們認為這個對象遵守了可迭代協議.
就可以進?迭代. 這?的__iter__是協助我們擷取到對象的迭代器. 我們使?__next__()來擷取
到?個迭代器中的元素. 那麼我們之前講的for的?作原理到底是什麼? 繼續看代碼

 

 

?. ?成器
什麼是?成器. ?成器實質就是迭代器.
在python中有三種?式來擷取?成器:
1. 通過?成器函數
2. 通過各種推導式來實現?成器
3. 通過資料的轉換也可以擷取?成器
今天, 我們主要使??成器函數來完成?成器的建立和使?.
?先, 我們先看?個很簡單的函數:

運?的結果和上?不?樣. 為什麼呢. 由於函數中存在了yield. 那麼這個函數就是?個?成器
函數. 這個時候. 我們再執?這個函數的時候. 就不再是函數的執?了. ?是擷取這個?成器.
如何使?呢? 想想迭代器. ?成器的本質是迭代器. 所以. 我們可以直接執?__next__()來執?
以下?成器.

 

 

樣本:

 當程式運?完最後?個yield. 那麼後?繼續進?__next__()程式會報錯.
好了?成器說完了. ?成器有什麼作?呢? 我們來看這樣?個需求. 公司向JACK JONES訂
購10000套學?服. JACK JONES就比較實在. 直接造出來10000套衣服.

但是公司現在沒那麼多人啊,你一下給我一萬套我沒地方存啊,很尷尬,   

最完美的就是我用一套 你給我一套  

 

區別: 第?種是直接?次性全部拿出來. 會很占?記憶體. 第?種使??成器. ?次就?個. ?多
少?成多少. ?成器是?個?個的指向下?個. 不會回去, __next__()到哪, 指標就指到哪?.
下?次繼續擷取指標指向的值.

---->>>> send和__next__區別<<<<<-----

第一次執行必須用__next__

 

 

這個比較亂,可以自己運行一下看看結果    先列印 然後列印yield傳回值  然後send傳值進上一個yield  列印出來

 

python 基礎篇 13 迭代器與產生器

聯繫我們

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