生成器的本質就是迭代器python
生成器的特色和迭代器同樣,取值方式和迭代器同樣。(__next__(),send():給上一個yield傳值)函數
生成器通常由生成器函數或者生成器表達是來建立spa
和普通函數沒有區別。裏面yield 的函數就是生成器函數code
生成器函數在執行的時候,默認不會執行函數體,返回生成器blog
經過生成器的__next__() 分段執行這個函數內存
def fun(): print("aaaa") yield 1 #返回數據 print("bbbb") yield 2 gen = fun() #拿到生成器 gen.__next__() #執行函數,執行到下一個yield gen.__next__() #繼續執行,執行到下一個yield
send() 給上一個yield 傳值,不能在開頭(沒有上一個yield),最後一個yield也不能用send()it
def eat(): print("菜單") a = yield "饅頭" print('a=',a) b = yield "雞蛋灌餅" print('b=', b) c = yield "手抓餅" print('c=',c) yield 'end' gen =eat() ret1 = gen.__next__() print(ret1) ret2 = gen.send("胡辣湯") print(ret2) ret3 = gen.send("小米粥") print(ret3) ret4 = gen.send("豆腐腦") print(ret4)
1.列表推導式 [結果 for循環 條件篩選]for循環
lis = [i for i in range(10)] print(lis)
2.字典推導式 [k:v for循環 條件篩選]class
di = {"1":"aaa","2":"bbb","3":"ccc"} dic = {j:i for i,j in di.items()} print(dic)
3.集合推導式 {k for循環 條件}循環
li = [2,3,5,3,1,8,9,4,5] se = {el for el in li} print(se)
(結果 for循環 條件)
特色:
1.惰性機制
2.只能向前
3.節省內存
def fun(): print(111) yield 222 g = fun() g1 = (i for i in g) g2 = (j for j in g1) print(list(g)) #111 [222] print(list(g1)) #[] print(list(g2)) #[]