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

歡迎訪問 生活随笔!

生活随笔

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

python

Python 生成器(yield)

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

Python 生成器


一、生成器(generator)

  • Python 的生成器是一種特殊的程序,可以被用作控制循環的迭代行為。生成器可以暫時掛起函數,并保留函數的局部變量等數據,然后在再次調用它的時候,從上次暫停的位置繼續執行下去。
  • 如果所要的序列的元素可以按照某種算法推算出來,可以采用迭代器一邊循環一邊計算的機制,這樣就不必創建完整的序列,從而節省大量的空間。
  • Python 的生成器是迭代器的一種。
  • 協程是基于生成器實現的。

二、基于列表生成式的生成器

1、創建生成器:列表生成式的 [ ] 改成 ( )

# 創建一個生成器,查看其類型 g = (x * x for x in range(5)) print(g) >>> <generator object <genexpr> at 0x00000173441AB2B0>

2、使用生成器:next()

每次調用next(g),就計算出生成器g的下一個元素的值,直到計算到最后一個元素,沒有更多的元素時,拋出StopIteration的錯誤

# 獲得生成器的下一個值 next(g) >>> 0 next(g) >>> 1 ...... next(g) >>> Traceback (most recent call last):File "<stdin>", line 1, in <module>StopIteration# 遍歷生成器 for n in g:print(n) >>> 0 1 4 9 16

三、yield 生成器

1、創建生成器:yield

# 創建一個生成器,查看其類型 def f(n):i = 0while i < n:yield i**2i += 1return 'finish'g = f(5) print(g) >>> <generator object f at 0x000001F73626B2B0>

2、使用生成器:next()

# 遍歷生成器 while True:try:x = next(g)print(x)except StopIteration as e:print('Generator return value:', e.value)break >>> 0 1 4 9 16Generator return value: finish

3、生成器傳遞參數:send()

  • yield 語句執行返回操作后會馬上掛起,等待接收值。send() 值時會馬上進行賦值,如果沒有接收者,會執行代碼直至 yield 語句。
  • 啟動生成器:.send(None),第一次使用 send(),這時候沒有 yield 接收值,執行函數的初始化代碼,直到 yield 語句,返回 yield 后面的值(語句的賦值操作沒有執行),生成器掛起。
  • 生成器再次傳遞值:.send(n),生成器會先接收值 n 賦值給 yield 語句的變量,然后執行 yield 語句之后的代碼,直至遇到下一個 yield 語句把 yield 后面的值返回給調用者,生成器再次掛起,等待接收值。
# 消費者 def consumer():r = ''while True:n = yield rif not n:returnprint('[CONSUMER] Consuming %s...' % n)r = 'done'# 生產者 def produce(c):c.send(None)n = 0while n < 5:n = n + 1print('[PRODUCER] Producing %s...' % n)r = c.send(n)print('[PRODUCER] Consumer return: %s' % r)c.close()c = consumer() produce(c)>>> [PRODUCER] Producing 1...[CONSUMER] Consuming 1...[PRODUCER] Consumer return: done......[PRODUCER] Producing 5...[CONSUMER] Consuming 5...[PRODUCER] Consumer return: done

GOOD LUCK!


總結

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

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