python學習筆記13 生成器 列表推導式及其他推導式

生成器

生成器的本質就是迭代器

生成器的三種生成辦法

1 通過生成器函數 函數中包含yield就是生成器函數,生成器函數被執行,獲取到的是生成器,而不是函數的執行,(不出函數結果)

2通過生成器表達式  (結果 for 變量 in 可迭代對象 if 篩選) 

3通過數據轉換

生成器特點: 1 節省內存 2 惰性機制(不到最後不取值執行) 3 只能向前執行

取值方式: 1 __next__( )  2 send(值) 給上一個yield位置傳一個值,第一個和最後一個yield不用傳值  3 for循環  4 list(g)

關鍵字 yield  返回結果,可以讓函數分段執行 最後一個yield後通常不寫代碼,否則執行的時候會報錯

__next__() 可以讓生成器向下執行一次

send() 也可以讓生成器向下執行一次,給上一個yield傳一個值,所以第一個位置不能用send(),只能用__next__()

而最後一個位置也不要用send() 傳值.

 

列表推導式 

語法:  [最終結果(變量) for 變量 in 可迭代對象(if 條件)]

列表推導式循環寫法: 

lst1 = [ i for first in names for i in first if i.count("e") == 2]

傳統循環寫法: 

for first in names:
    for i in first:
        if i.count("e") == 2:
            lst1.append(i)

 

lst = ["python%s" % i for i in range(1,15)]

字典推導式 {key:value}

lst1 = ["alex",'wusir','taibai','ritian']
lst2 = ['sb','hense','henbai','henniu']
dic = {lst1[i]:lst2[i] for i in range(len(lst1))}

集合推導式 (value) 自動去重

s = {i for i in list}

不存在元組推導式

作業

lst = ['balck','123123','yellow','Blue','ab','D']
lst1 = [i.upper() for i in lst if len(i)>=3]
print(lst1)

lst2 = [(x,y) for x in range(6) for y in range(6) if (x%2==0)&(y%2==1)]
print(lst2)

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章