色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python生成器是什么

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-02-24 15:53 ? 次閱讀

python生成器

1. 什么是生成器?

生成器(英文名 Generator ),是一個可以像迭代器那樣使用for循環來獲取元素的函數。

生成器的出現(Python 2.2 +),實現了延時計算,從而緩解了在大量數據下內存消耗過猛的問題。

當你在 Python Shell 中敲入一個生成器對象,會直接輸出 generator object 提示你這是一個生成器對象

>>> gen = (i for i in range(5))
>>> gen
 at 0x10cae50b0>

2. 如何創建生成器?

使用列表推導式

在上面已經演示過,正常我們使用列表推導式時是下面這樣子,使用 [] ,此時生成的是列表。

>>> mylist = [i for i in range(5)]
>>> mylist
[0, 1, 2, 3, 4]

而當你把 [] 換成 () ,返回的就不是列表了,而是一個生成器

>>> gen = (i for i in range(5))
>>> gen
 at 0x10cae50b0>

使用 yield

yield 是什么東西呢? 它相當于我們函數里的 return,但與 return 又有所不同。

當一個函數運行到 yield 后,函數的運行會暫停,并且會把 yield 后的值返回出去。

若 yield 沒有接任何值,則返回 None

yield 雖然返回了,但是函數并沒有結束

請看如下代碼,我定義了一個 generator_factory 函數,當我執行 gen = generator_factory() 時,gen 就是一個生成器對象

>>> def generator_factory(top=5):
...     index = 0
...     while index < top:
...         print("index 值為: " + str(index))
...         index = index + 1
...         yield index
...     raise StopIteration
...
>>> gen = generator_factory()
>>> gen

3. 生成器的使用

從一個生成器對象中取出元素,和我們前面學過的通過切片訪問列表中的元素不一樣,它沒有那么直觀。

想要從生成器對象中取出元素,只有兩種方法:

第一種方法:使用 next 方法一個一個地把元素取出來,如果元素全部取完了,生成器會拋出 StopIteration 的異常。

>>> gen = (x for x in range(3))
>>> gen
 at 0x1072400b0>
>>> next(gen)
0
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

第二種方法:使用 for 循環一個一個地迭代出來

>>> gen = (x for x in range(3))
>>> for i in gen:
...     print(i)
...
0
1
2

4. 生成器的激活

生成器對象,在創建后,并不會執行任何的代碼邏輯。

想要從生成器對象中獲取元素,那么第一步要觸發其運行,在這里稱之為激活。

方法有兩種:

使用next() :上面已經講過

使用generator.send(None)

還以下面這段代碼為例,可以看到 gen.send(None) 相當于執行了 next(gen)

>>> def generator_factory(top=5):
...     index = 0
...     while index < top:
...         print("index 值為: " + str(index))
...         index = index + 1
...         yield index
...     raise StopIteration
...
>>>
>>> gen = generator_factory()
>>> gen.send(None)
index 值為: 0
1
>>> gen.send(None)
index 值為: 1
2

5. 生成器的狀態

生成器在其生命周期中,會有如下四個狀態

GEN_CREATED # 生成器已創建,還未被激活

GEN_RUNNING # 解釋器正在執行(只有在多線程應用中才能看到這個狀態)

GEN_SUSPENDED # 在 yield 表達式處暫停

GEN_CLOSED # 生成器執行結束

通過下面的示例可以很輕松地理解這一過程(GEN_RUNNING 這個狀態只有在多線程中才能觀察到,這里就不演示啦)

>>> gen = (x for x in range(2))
>>> from inspect import getgeneratorstate
>>> gen = (x for x in range(3))
>>> getgeneratorstate(gen)
'GEN_CREATED'
>>>
>>> next(gen)
0
>>> getgeneratorstate(gen)
'GEN_SUSPENDED'
>>> next(gen)
1
>>> next(gen)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration
>>> getgeneratorstate(gen)
'GEN_CLOSED'

6. 生成器的異常

在最前面,我有定義了一個生成器函數。

def generator_factory(top=2):
    index = 0
    while index < top:
        index = index + 1
        yield index
    raise StopIteration

在沒有元素可返回時,我最后拋出了 StopIteration 異常,這是為了滿足生成器的協議。

實際上,如果你不手動拋出 StopIteration,在生成器遇到函數 return 時,會我自動拋出 StopIteration

請看下面代碼,我將 raise StopIteration 去掉后,仍然會拋出異常。

>>> def generator_factory(top=2):
...     index = 0
...     while index < top:
...         index = index + 1
...         yield index
...
>>> gen = generator_factory()
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 生成器
    +關注

    關注

    7

    文章

    322

    瀏覽量

    21577
  • python
    +關注

    關注

    56

    文章

    4822

    瀏覽量

    85907
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    使用s32ds軟件時,無法生成是怎么回事?

    使用s32ds軟件時,無法生成,并顯示以下錯誤消息。 請幫忙。 生成器:錯誤:錯誤:LinStackCfg.npf 行:5 “bus_clock” - 語法錯誤
    發表于 04-04 08:04

    “Quantum Origin”成首個獲NIST驗證的軟件量子隨機數生成器

    -Quantinuum的“Quantum Origin”成為首個通過NIST驗證的軟件量子隨機數生成器 Quantum Origin獲得NIST SP 800-90B對其驗證熵源的批準 增強了聯邦
    的頭像 發表于 04-03 15:22 ?191次閱讀

    EB Tresos狀態顯示無法運行生成器是什么原因導致的?

    我正在嘗試集成 MCAL 包,但在生成過程中收到如下驗證錯誤:“無法為模塊”Dio_TS_T40D2M20I0R0“運行生成器
    發表于 04-02 08:06

    Python中的迭代器與生成器

    Python迭代器與生成器 列表生成式 列表生成式也叫做列表推導式,它本身還是列表,只不過它是根據我們定義的規則來生成一個真實的列表。 ?
    的頭像 發表于 02-20 10:43 ?250次閱讀

    開源隨機數生成器庫OpenRNG助力實現移植到Arm平臺時的最佳性能

    OpenRNG 實現了多種生成器和分布方式。生成器算法可生成“看似隨機”并具有某些統計特性的序列,我們將在下文進行討論。分布方式會將序列映射到常見的概率分布概念,如高斯分布或二項分布
    的頭像 發表于 02-08 09:24 ?1060次閱讀
    開源隨機數<b class='flag-5'>生成器</b>庫OpenRNG助力實現移植到Arm平臺時的最佳性能

    超詳細!FMU生成器用戶手冊來啦~

    FMU生成器是TSMaster中用于將模型打包生成FMU文件的一個工具,目前支持FMI3.0和FMI2.0版本,FMU類型僅支持Co-Simulation(CS),即聯合仿真FMU。本文將介紹FMU
    的頭像 發表于 01-17 20:02 ?644次閱讀
    超詳細!FMU<b class='flag-5'>生成器</b>用戶手冊來啦~

    EE-322:面向SHARC處理器的專家代碼生成器

    電子發燒友網站提供《EE-322:面向SHARC處理器的專家代碼生成器.pdf》資料免費下載
    發表于 01-07 14:04 ?0次下載
    EE-322:面向SHARC處理器的專家代碼<b class='flag-5'>生成器</b>

    使用C2000?嵌入式模式生成器(EPG)進行設計

    電子發燒友網站提供《使用C2000?嵌入式模式生成器(EPG)進行設計.pdf》資料免費下載
    發表于 09-14 10:13 ?1次下載
    使用C2000?嵌入式模式<b class='flag-5'>生成器</b>(EPG)進行設計

    Freepik攜手Magnific AI推出AI圖像生成器

    近日,設計資源巨頭Freepik攜手Magnific AI,共同推出了革命性的AI圖像生成器——Freepik Mystic,這一里程碑式的發布標志著AI圖像創作領域邁入了一個全新的高度
    的頭像 發表于 08-30 16:23 ?1413次閱讀

    CDCM6208V1F具有小數分頻器的2:8時鐘生成器/抖動消除器數據表

    電子發燒友網站提供《CDCM6208V1F具有小數分頻器的2:8時鐘生成器/抖動消除器數據表.pdf》資料免費下載
    發表于 08-20 09:13 ?2次下載
    CDCM6208V1F具有小數分頻器的2:8時鐘<b class='flag-5'>生成器</b>/抖動消除器數據表

    具有小數分頻器的CDCM6208 2:8時鐘生成器/抖動消除器數據表

    電子發燒友網站提供《具有小數分頻器的CDCM6208 2:8時鐘生成器/抖動消除器數據表.pdf》資料免費下載
    發表于 08-20 09:07 ?0次下載
    具有小數分頻器的CDCM6208 2:8時鐘<b class='flag-5'>生成器</b>/抖動消除器數據表

    TSMaster 測試報告生成器操作指南

    用戶在基于TSMaster軟件開發測試用例時,或需要使用TSMaster生成HTML報告時,需要使用TSMaster測試報告生成器。1Test_Report說明Test_Report是目前
    的頭像 發表于 08-03 08:21 ?834次閱讀
    TSMaster 測試報告<b class='flag-5'>生成器</b>操作指南

    生成對抗網絡(GANs)的原理與應用案例

    相互競爭的神經網絡——生成器(Generator)和判別器(Discriminator),實現了高效、靈活的數據生成能力。本文將從GANs的原理、核心算法、以及多個應用案例入手,深入探討這一前沿技術的內涵與應用。
    的頭像 發表于 07-09 11:34 ?1908次閱讀

    Adobe發布Lightroom人工智能新功能:生成消除和鏡頭模糊預覽

    Adobe此次公布的新功能包括生成式消除(Generative Remove)與鏡頭模糊預設(Lens Blur presets)兩項人工智能技術。前者名為“Firefly”的人工智能圖像生成器將為生成式消除提供有力支持。
    的頭像 發表于 05-22 12:09 ?1205次閱讀

    微軟Edge瀏覽器將引入AI主題生成器,為用戶提供獨特的主頁設計

    根據微軟的365產品規劃,他們計劃在Edge瀏覽器中添加人工智能主題生成器。這項創新功能允許用戶通過文字描述來創建個性化主題,人工智能系統將生成一系列預覽圖片,并將其作為瀏覽器主題。
    的頭像 發表于 05-13 15:16 ?957次閱讀
    主站蜘蛛池模板: 一二三四在线高清中文版免费观看电影 | 激情男女高潮射精AV免费 | 91日本在线观看亚洲精品 | 全黄H全肉细节文短篇 | 小黄文纯肉短篇 | 99手机在线视频 | 调教日本美女 | 久久看片网 | 视频一区精品自拍亚洲 | 91热久久免费频精品99欧美 | 快播理论片 | 一本道高清到手机在线 | 欧美香蕉大胸在线视频观看 | 护士的下面又湿又紧10P | 全黄h全肉细节文在线观看 全黄H全肉细节文短篇 | 最近日本MV字幕免费观看视频 | 一个人的免费高清影院 | 色老板影视 | 8090碰成年女人免费碰碰尤物 | xvideos中文版在线视频 | 欧美free嫩交hd | 在线 自拍 综合 亚洲 欧美 | 久草草在线视视频 | 国产精品18久久久久久欧美网址 | 日韩欧无码一区二区三区免费不卡 | 大桥未久电影在线观看 | 啊轻点啊再深点视频免费 | 日本黄色成年人免费观看 | 强姧伦久久久久久久久 | 国产精品看高国产精品不卡 | 18禁裸乳无遮挡免费网站 | 手机移动oa| 亚洲欧美免费无码专区 | 久久电影午夜 | 99er热精品视频国产免费 | 乌克兰内射私拍 | 久久re视频这里精品09免费 | 国产精品久久免费视频 | 色AV色婷婷97人妻久久久 | 亚洲国产中文字幕新在线 | 中文字幕亚洲无线码在线 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品