日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

生成器和推导式

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生成器和推导式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
def func():print('哈哈哈')yield 1 # return 和 yield 都可以返回數據print('呵呵呵') gen = func() # 不會執行你的函數,拿到的是生成器 ret = gen.__next__() # 會執行到下一個yield print(ret) gen.__next__() # 繼續執行函數到下一個yield 函數中如果有yield 這個函數就是生成器函數,生成器函數() 獲取的是生成器,這個時候不執行函數
yield:相當于return,可以返回數據,但是yield不會徹底中斷函數,分段執行函數 def order():for i in range(100000):yield '衣服'+ str(i) g = order() # 獲取生成器 mingwei = g.__next__() print(mingwei) zhaoyinning = g.__next__() print(zhaoyinning)

?send() 和 __next__()的區別:

1.send和next都是讓生成器向下走一次

2.send可以給上一個yield的位置傳遞值,不能給最后一個yield發送值,在第一次執行生成器代碼的時候不能使用send()

def eat():print("我吃什么啊")a = yield "饅頭"print("a=",a)b = yield "大"print("b=",b)c = yield "韭菜盒子"print("c=",c)yield "GAME OVER" gen = eat() # 獲取生成器 ret1 = gen.__next__() print(ret1) # 饅頭 ret2 = gen.send("胡辣湯") # a = 胡辣湯 print(ret2) # 大餅 ret3 = gen.send("狗糧") # b = 狗糧 print(ret3) # 韭菜盒子 ret4 = gen.send("貓糧") # c = 貓糧 print(ret4) # GAME OVER

?

推導式:用一句話生成一個列表

lst = ['python'+str(i) for i in range(1,16)] print(lst)

語法:[ 結果? for循環? 判斷]

lst = [i for i in range(100) if i%2 == 1] print(lst) # 100 以內能被3整除的數的平方 lst = [i*i for i in range(100) if i%3==0] print(lst) # 尋找名字中帶有兩個e的人的名字 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] # 不用推導式的方法 lst = [] for line in names:for name in line:if name.count('e') == 2:lst.append(name) print(lst)#推導式的方法 lst = [name for line in names for name in line if name.count('e') == 2] print(lst)

字典推導式

語法:{k:v for循環 條件篩選}

#[11,22,33,44] => {0:11,1:22,2:33,3:44} lst = [11,22,33,44] dic = {i:lst[i] for i in range(len(lst))} print(dic) # 鍵值對互換 dic = {'jj':'林俊杰','jay':'周杰倫','zs':'趙四','ln':'劉能'} dic2 = {v:k for k,v in dic.items()} print(dic2)

集合推導式(可以去重復)

lst = [1,1,4,6,7,4,2,2]

s = {el for el in lst}

print(s)

?

生成器表達式(由于惰性機制)

tu = (i for i in range(10)) # 沒有元組推導式,生成器表達式 print(tu) # 生成器 print(tu.__next__()) def func():print(111)yield 222 g = func() g1 = (i for i in g) g2 = (i for i in g1)print(list(g)) # [222] 源頭,從源頭把數據拿走了 print(list(g1)) # [] 這里執行的時候,源頭已經沒有數據了 print(list(g2)) # [] 這里也沒有值 def add(a,b):return a + b
# 生成器函數 # 0-3
def test():for j in range(4):yield j
# 0,1,2,3 g
= test() # 獲取生成器

# 懶
for n in [1,10,5]:g = (add(n,i) for i in g)
# 到最后往里面放數據就對了
print(list(g)) # [15,16,17,18]
print(list(g)) # []

?

轉載于:https://www.cnblogs.com/Little-Raccoon/p/10834696.html

總結

以上是生活随笔為你收集整理的生成器和推导式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。