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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python生成器函数(generator),python3学习笔记:生成器generator

發布時間:2024/9/27 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python生成器函数(generator),python3学习笔记:生成器generator 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。

生成器的基本屬性

generator = 函數 + yield

簡單說,就是一個函數,里面用到了關鍵字yield,就成為了一個生成器

生成器和函數的不同主要在于:

直接調用生成器,不會執行;

舉個栗子:a = f() #這里f()是個生成器

運行上面這句,f()不會執行,首次執行需要使用next(a)或a.send(None),后面會細講

每次執行,會暫時中斷在yield關鍵字處,而且通過yield可以返回一個參數

下次再接著執行,會從上次中斷的yield處接著執行,并可以通過send()傳遞參數,當然繼續中斷在下一個yield處

如果通過send()或next()執行generator,而沒有找到下一個yield,會報錯

yield返回值&&傳參

總結就是:

return = send(msg)

傳遞參數msg給當前中斷yield前面的變量

同時返回下一個yield后面的參數給return

return = next(a)

沒有傳遞參數或者說傳遞參數None給當前中斷yield前面的變量

同時返回下一個yield后面的參數給return

直接看下面的栗子,直觀明了

#生成器

def f():

print('start')

a = yield 1 #可以返回參數1,并接收傳遞的參數給a

print(a)

print('middle')

b = yield 2 #可以返回參數2,并接收傳遞的參數給b

print(b)

print('next')

c = yield 3 #可以返回參數3,并接收傳遞的參數給c

print(c) #這里貌似永遠不會執行,因為總會在上一行的yield處結束

a = f() #這里不會執行,即沒有任何打印信息

#a.next() #這種寫法在python3里面會報錯

return1 = next(a)#輸出start,中斷在yield 1處,返回yield后面的1給return1

#return1 = a.send(None) #效果同上一條語句

#return1 = a.send('test') #這里會報錯

#如果首次執行generator,就傳遞一個非None的參數,因為第一次執行不是從一般的中斷yield處執行起,所以沒有yield關鍵字來接收傳參,就會報錯

print(return1)

return2 = next(a)#傳入參數為None,即a=None,返回2給return2

print(return2)

return3 = a.send('msg')#傳入參數msg,即b=msg,返回3給return3

print(return3)

執行結果如下:

start

1

None

middle

2

msg

next

3

[Finished in 0.7s]

總結

以上是生活随笔為你收集整理的python生成器函数(generator),python3学习笔记:生成器generator的全部內容,希望文章能夠幫你解決所遇到的問題。

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