通常的for…in…循環中,in后面是一個數組,這個數組就是一個可迭代對象,類似的還有鏈表,字符串,文件。它可以是mylist= [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有數據都在內存中,如果有海量數據的話將會非常耗內存。
生成器是可以迭代的,但只可以讀取它一次。因為用的時候才生成。比如 mygenerator = (x*x for x in range(3)),注意這里用到了(),它就不是數組,而上面的例子是[]。
我理解的生成器(generator)能夠迭代的關鍵是它有一個next()方法,工作原理就是通過重復調用next()方法,直到捕獲一個異常??梢杂蒙厦娴膍ygenerator測試。
帶有yield的函數不再是一個普通函數,而是一個生成器generator,可用于迭代,工作原理同上。
yield一個類似return的關鍵字,迭代一次遇到yield時就返回yield后面的值。重點是:下一次迭代時,從上一次迭代遇到的yield后面的代碼開始執行。
簡要理解:yield就是return返回一個值,并且記住這個返回的位置,下次迭代就從這個位置后開始。
帶有yield的函數不僅僅只用于for循環中,而且可用于某個函數的參數,只要這個函數的參數允許迭代參數。比如array.extend函數,它的原型是array.extend(iterable)。
send(msg)與next()的區別在于send可以傳遞參數給yield表達式,這時傳遞的參數會作為yield表達式的值,而yield的參數是返回給調用者的值?!獡Q句話說,就是send可以強行修改上一個yield表達式值。比如函數中有一個yield賦值,a
= yield 5,第一次迭代到這里會返回5,a還沒有賦值。第二次迭代時,使用.send(10),那么,就是強行修改a表達式的值為10,本來是None的,那么a=10
send(msg)與next()都有返回值,它們的返回值是當前迭代遇到yield時,yield后面表達式的值,其實就是當前迭代中yield后面的參數。
第一次調用時必須先next()或send(None),否則會報錯,send后之所以為None是因為這時候沒有上一個yield(根據第8條)??梢哉J為,next()等同于send(None)。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
國際貿易付款方式有哪幾種?1、匯付:是指進口方直接付款的方式。;2、信用證:指銀行進口商的信用保證文件;3、匯票:由出票人簽發的在指定日期內給收款人資金的票據;4、本票:由出票人簽發費承諾給收款人一定金額的票據;5、支嫖:在銀行見票時,無條件支付確定金額給收款人的票據;6、托收:托銀行收款。外貿匯款方式有哪些1、T/T電匯。T/T電匯是指匯出行應匯款人申請,拍發加押電報\電傳或SWIFT給在另一國...
建行所推出的結算通卡,和儲蓄卡的本質都是一樣的,都屬于借記卡的一種,但是在具體的功能方面,建行的結算通卡又有一些特色的地方,和儲蓄卡不太一樣,那么建行結算通卡屬于一類卡嗎?建行結算通卡和儲蓄卡的區別有哪些呢!建行結算通卡屬于一類卡嗎?建行的結算通卡是準貸卡,是建行為方便商戶結算使用而推出的一款銀行卡,因此不是一類卡也不是二類卡。建行的結算通卡具有建行的普通借記卡的所有功能,如儲蓄貸款、轉賬、各類繳...
一、開發商房屋延期交付流程開發商房屋延期交付流程是在遇到延期交房,您可以選擇要求開發商支付違約金,或者退房,并要求賠償損失?!渡唐贩夸N售管理辦法》第三十條,房地產開發企業應當按照合同約定,將符合交付使用條件的商品房按期交付給買受人。未能按期交付的,房地產開發企業應當承擔違約責任。因不可抗力或者當事人在合同中約定的其他原因,需延期交付的,房地產開發企業應當及時告知買受人。(資料圖)二、開發商延期交房...