標籤:衣服 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 迭代器與產生器