python生成器yield_python 生成器yield的总结
(1):通常的for..in...循環(huán)中,in后面是一個數(shù)組,這個數(shù)組就是一個可迭代對象,類似的還有鏈表,字符串,文件。他可以是a = [1,2,3],也可以是a = [x*x for x in range(3)]。
它的缺點也很明顯,就是所有數(shù)據(jù)都在內(nèi)存里面,如果有海量的數(shù)據(jù),將會非常耗內(nèi)存。
(2)生成器是可以迭代的,但是只可以讀取它一次。因為用的時候才生成,比如a = (x*x for x in range(3))。!!!!注意這里是小括號而不是方括號。
(3)生成器(generator)能夠迭代的關(guān)鍵是他有next()方法,工作原理就是通過重復調(diào)用next()方法,直到捕獲一個異常。
(4)帶有yield的函數(shù)不再是一個普通的函數(shù),而是一個生成器generator,可用于迭代
(5)yield是一個類似return 的關(guān)鍵字,迭代一次遇到y(tǒng)ield的時候就返回yield后面或者右面的值。而且下一次迭代的時候,從上一次迭代遇到的yield后面的代碼開始執(zhí)行
(6)yield就是return返回的一個值,并且記住這個返回的位置。下一次迭代就從這個位置開始。
(7)帶有yield的函數(shù)不僅僅是只用于for循環(huán),而且可用于某個函數(shù)的參數(shù),只要這個函數(shù)的參數(shù)也允許迭代參數(shù)。
(8)send()和next()的區(qū)別就在于send可傳遞參數(shù)給yield表達式,這時候傳遞的參數(shù)就會作為yield表達式的值,而yield的參數(shù)是返回給調(diào)用者的值,也就是說send可以強行修改上一個yield表達式值。
(9)send()和next()都有返回值,他們的返回值是當前迭代遇到的yield的時候,yield后面表達式的值,其實就是當前迭代yield后面的參數(shù)。
(10)第一次調(diào)用時候必須先next()或send(),否則會報錯,send后之所以為None是因為這時候沒有上一個yield,所以也可以認為next()等同于send(None)
總結(jié)
以上是生活随笔為你收集整理的python生成器yield_python 生成器yield的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中if判断中文_当Excel表格中的条件
- 下一篇: 血栓清道夫机器人_血栓“清道夫”找到了!