生成器
生成器的本質就是迭代器
生成器的三種生成辦法
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)