'''
生成器?:?本質上還是一個迭代器,保證在我們需要的時候,按照我們的需要取值,而并不會立刻生成所有的值,依此大大節(jié)約內存,甚至幾乎不占用內存
生成器函數(shù)?:?函數(shù)返回值時,以yield替代return,調用該函數(shù)后,返回一個生成器,而并不執(zhí)行函數(shù)
????#注?:?yield除特殊功能外,相當于return,返回后面的值
生成器的特點(重點)?:?在同一個代碼塊中,生成器絕不二次執(zhí)行相同的代碼
生成器的調用?:?generator.__next__()????#再次調用時,從上一次調用結束為開始至下一個yield結束
#注?:?調用時,不可使用func().__next()等價替代上文,否則永遠只執(zhí)行第一個yield之前的內容
給上一個yield所在位置傳值?:????gene,send()????#不僅傳值,還包括__next__()
????案例?:
????????def?func()?:
????????????print("1")
????????????a?=?yield?2
????????????print("3",a)
????????????b?=?yield?4
????????????print("6",b)
????????????yield?7
????????gene?=?func()????#生成一個生成器
????????print(gene.__next__())????#執(zhí)行print("1")
???????????????????????????????????????yield?2?????#打印1,返回2;
????????print(gene.send("a"))????#執(zhí)行a?=?"a"????#send函數(shù)為該處傳值"a"
??????????????????????????????????????print("3",a)????
??????????????????????????????????????yield?4????#打印3,?a,返回4,并打印
????????print(gene.send("b"))????#執(zhí)行b?=?"b"????#send函數(shù)為該處傳值"b"
??????????????????????????????????????print("6",b)
??????????????????????????????????????yield?7????#打印6,b,返回7,并打印
????????輸出結果?:
????????????1
????????????2
????????????3?a
????????????4
????????????6?b
????????????7
一次性取出生成器里的所有返回值?:?list(gene)
'''
標題名稱:Python之生成器
分享URL:
http://weahome.cn/article/ggpeop.html