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

歡迎訪問 生活随笔!

生活随笔

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

python

Python中yield返回生成器的详细方法

發布時間:2025/3/20 python 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中yield返回生成器的详细方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最簡單、直觀的認識,將 yield 看做 return 對待,只是 return 返回一個值,而 yield 返回一個生成器。

要理解 yield 的作用,必須理解生成器是什么?

在理解生成器之前,必須先理解迭代器。

一、迭代器

逐項讀取列表,稱為迭代。

mylist = [1, 2, 3] for i in mylist: # 可迭代對象print(i)

列表解析式同樣是一個迭代器。

mylist = [x*x for x in range(3)] for i in mylist:print(i) ''' 0 1 4 '''

所有 for…in… 都是迭代器,包括列表、字符串、文件等等。

但是,迭代器所有的值都存儲在內存中,十分浪費內存。

因此有了生成器的概念。

二、生成器

生成器是一種迭代器,這種迭代器只能迭代一次。

生成器不會一次性存儲所有的值,而是會動態的生成值。

mygenerator = (x*x for x in range(3)) for i in mygenerator:print(i)

生成器只可執行一次,再次執行時不會輸出任何東西。

三、yield

1.例子一

yield 類似于 return 關鍵字,只是函數將返回一個生成器。

# 創建生成器 def createGenerator():mylist = range(10)for i in mylist:print(i) # 驗證函數調用時并無執行yield i*i mygenerator = createGenerator() print(mygenerator) # <generator object createGenerator at 0x0000029E88FDCA50># 使用生成器 for i in mygenerator:print(i)# 再次執行 返回為空 沒有值了

函數將返回一組只需要讀取一次的值,可以大大的提升代碼性能。

在調用函數時,函數體中的代碼并不會執行,函數只返回生成器對象。

代碼每次從使用生成器時停止的地方繼續。

2.例子二

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # 學習另外一個例子 def foo():print("starting...")while True:res = yield 4 # 函數并不真正執行print("res:", res)g = foo() # 得到一個生成器對象 print(next(g)) # 真正執行 print("*"*20) print(next(g)) # 從上一次停止的地方繼續執行 ''' starting... 4 ******************** res: None 4 '''print(g.send(7))

執行 yield 之后,才會跳出 while 循環。

  • next 函數用于執行下一步操作。

  • send 函數用于發送一個參數給生成器。且 send 方法中包含 next 方法。

結尾給大家推薦一個非常好的學習教程,希望對你學習Python有幫助!

Python基礎入門教程推薦:更多Python視頻教程-關注B站:Python學習者

【Python教程】全網最容易聽懂的1000集python系統學習教程(答疑在最后四期,滿滿干貨)

Python爬蟲案例教程推薦:更多Python視頻教程-關注B站:Python學習者

2021年Python最新最全100個爬蟲完整案例教程,數據分析,數據可視化,記得收藏哦

總結

以上是生活随笔為你收集整理的Python中yield返回生成器的详细方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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