python 生成器、生成器函數、推導式、生成器表達式

1、生成器

   生成器的本質就是迭代器python

   生成器的特色和迭代器同樣,取值方式和迭代器同樣。(__next__(),send():給上一個yield傳值)函數

   生成器通常由生成器函數或者生成器表達是來建立spa

2、生成器函數

   和普通函數沒有區別。裏面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)

  

3、推導式

   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)

  

4、生成器表達式

   (結果 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))  #[]
相關文章
相關標籤/搜索