Python中怎么實現一個生成器函數,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創新互聯主營雁江網站建設的網絡公司,主營網站建設方案,app軟件開發公司,雁江h5重慶小程序開發搭建,雁江網站營銷推廣歡迎雁江等地區企業咨詢
在 Python 中,一邊循環一邊計算的機制,稱為生成器(Generator);
生成器是一個返回迭代器的函數,只能用于迭代操作;
生成器是Python中的一個對象,對這個對象進行操作,可以依次生產出按生成器內部運算產生的數據;
生成器函數指的是函數體中包含yield關鍵字的函數(yield就是專門給生成器用的return);
生成器可以通過生成器表達式和生成器函數獲取到;
def add(): for i in range(10): yield i g = add() print(g) # <generator object add at 0x10f6110f8> print(next(g)) # 0 print(next(g)) # 1
我們可以通過yield關鍵字來定義一個生成器函數,這個生成器函數返回值就是一個生成器對象;
def gen(): print('111111') yield '111111' print('222222') yield '222222' print('333333') yield '333333' g = gen() print(g) # <generator object gen at 0x0026BBF0> next(g) # 111111 next(g) # 222222 next(g) # 333333 next(g, 'over')
生成器函數可以使用next()迭代,且每次next()只會返回一次yield的值,然后暫停,下次一次next()時會在當前位置繼續,如果沒有元素可以迭代了,還 執在行next()則需要給定一個默認值,不給默認值會報錯;
如果在生成器函數中使用return,則會終止迭代,且不能得到返回值;
def gen(): print('111111') yield '111111' print('222222') return '222222' print('333333') yield '333333' g = gen() print(g) # <generator object gen at 0x0026BBF0> next(g) # 111111 next(g) # 222222, 拋出異常
# 死循環 def way(): i = 0 while True: i += 1 yield i c = way() print(next(c)) # 1 print(next(c)) # 2 print(next(c)) # 3 print(next(c)) # 4 print(next(c)) # 5
在生成器中使用死循環,不會一直執行,仍舊是執行多少次next(),返回多少個值;
# 普通生成器函數way1 def way1(): for i in range(5): yield i # 帶語法糖的生成器函數way2 def way2(): yield from range(5) #循環輸出way1 for i in way1(): print(i) #0 1 2 3 4 #循環輸出way2 for j in way2(): print(j) #0 1 2 3 4
語法糖指那些沒有給計算機語言添加新功能,而只是對人類來說更“甜蜜”的語法;
語法糖給程序員提供了更實用的編碼方式,有益于更好的編碼風格,更易讀;
生成器的語法糖也就是生成器的一種語法,作用是使代碼更加簡潔;
看完上述內容,你們掌握Python中怎么實現一個生成器函數的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
網頁標題:Python中怎么實現一個生成器函數
URL地址:http://m.2m8n56k.cn/article18/pshigp.html
成都網站建設公司_創新互聯,為您提供響應式網站、網站建設、服務器托管、網站改版、網站制作、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯