在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python生成器是什么

python爬蟲(chóng)知識(shí)分享 ? 來(lái)源:python爬蟲(chóng)知識(shí)分享 ? 作者:python爬蟲(chóng)知識(shí)分享 ? 2022-02-24 15:53 ? 次閱讀

python生成器

1. 什么是生成器?

生成器(英文名 Generator ),是一個(gè)可以像迭代器那樣使用for循環(huán)來(lái)獲取元素的函數(shù)。

生成器的出現(xiàn)(Python 2.2 +),實(shí)現(xiàn)了延時(shí)計(jì)算,從而緩解了在大量數(shù)據(jù)下內(nèi)存消耗過(guò)猛的問(wèn)題。

當(dāng)你在 Python Shell 中敲入一個(gè)生成器對(duì)象,會(huì)直接輸出 generator object 提示你這是一個(gè)生成器對(duì)象

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

2. 如何創(chuàng)建生成器?

使用列表推導(dǎo)式

在上面已經(jīng)演示過(guò),正常我們使用列表推導(dǎo)式時(shí)是下面這樣子,使用 [] ,此時(shí)生成的是列表。

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

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

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

使用 yield

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

當(dāng)一個(gè)函數(shù)運(yùn)行到 yield 后,函數(shù)的運(yùn)行會(huì)暫停,并且會(huì)把 yield 后的值返回出去。

若 yield 沒(méi)有接任何值,則返回 None

yield 雖然返回了,但是函數(shù)并沒(méi)有結(jié)束

請(qǐng)看如下代碼,我定義了一個(gè) generator_factory 函數(shù),當(dāng)我執(zhí)行 gen = generator_factory() 時(shí),gen 就是一個(gè)生成器對(duì)象

>>> 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. 生成器的使用

從一個(gè)生成器對(duì)象中取出元素,和我們前面學(xué)過(guò)的通過(guò)切片訪問(wèn)列表中的元素不一樣,它沒(méi)有那么直觀。

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

第一種方法:使用 next 方法一個(gè)一個(gè)地把元素取出來(lái),如果元素全部取完了,生成器會(huì)拋出 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 循環(huán)一個(gè)一個(gè)地迭代出來(lái)

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

4. 生成器的激活

生成器對(duì)象,在創(chuàng)建后,并不會(huì)執(zhí)行任何的代碼邏輯。

想要從生成器對(duì)象中獲取元素,那么第一步要觸發(fā)其運(yùn)行,在這里稱之為激活。

方法有兩種:

使用next() :上面已經(jīng)講過(guò)

使用generator.send(None)

還以下面這段代碼為例,可以看到 gen.send(None) 相當(dāng)于執(zhí)行了 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. 生成器的狀態(tài)

生成器在其生命周期中,會(huì)有如下四個(gè)狀態(tài)

GEN_CREATED # 生成器已創(chuàng)建,還未被激活

GEN_RUNNING # 解釋器正在執(zhí)行(只有在多線程應(yīng)用中才能看到這個(gè)狀態(tài))

GEN_SUSPENDED # 在 yield 表達(dá)式處暫停

GEN_CLOSED # 生成器執(zhí)行結(jié)束

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

>>> 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. 生成器的異常

在最前面,我有定義了一個(gè)生成器函數(shù)。

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

在沒(méi)有元素可返回時(shí),我最后拋出了 StopIteration 異常,這是為了滿足生成器的協(xié)議。

實(shí)際上,如果你不手動(dòng)拋出 StopIteration,在生成器遇到函數(shù) return 時(shí),會(huì)我自動(dòng)拋出 StopIteration

請(qǐng)看下面代碼,我將 raise StopIteration 去掉后,仍然會(huì)拋出異常。

>>> 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

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    320

    瀏覽量

    21149
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85075
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    開(kāi)源隨機(jī)數(shù)生成器庫(kù)OpenRNG助力實(shí)現(xiàn)移植到Arm平臺(tái)時(shí)的最佳性能

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

    超詳細(xì)!FMU生成器用戶手冊(cè)來(lái)啦~

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

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

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

    使用C2000?嵌入式模式生成器(EPG)進(jìn)行設(shè)計(jì)

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

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

    近日,設(shè)計(jì)資源巨頭Freepik攜手Magnific AI,共同推出了革命性的AI圖像生成器——Freepik Mystic,這一里程碑式的發(fā)布標(biāo)志著AI圖像創(chuàng)作領(lǐng)域邁入了一個(gè)全新的高度
    的頭像 發(fā)表于 08-30 16:23 ?1232次閱讀

    CDCM6208V1F具有小數(shù)分頻器的2:8時(shí)鐘生成器/抖動(dòng)消除器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDCM6208V1F具有小數(shù)分頻器的2:8時(shí)鐘生成器/抖動(dòng)消除器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-20 09:13 ?0次下載
    CDCM6208V1F具有小數(shù)分頻器的2:8時(shí)鐘<b class='flag-5'>生成器</b>/抖動(dòng)消除器數(shù)據(jù)表

    具有小數(shù)分頻器的CDCM6208 2:8時(shí)鐘生成器/抖動(dòng)消除器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有小數(shù)分頻器的CDCM6208 2:8時(shí)鐘生成器/抖動(dòng)消除器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-20 09:07 ?0次下載
    具有小數(shù)分頻器的CDCM6208 2:8時(shí)鐘<b class='flag-5'>生成器</b>/抖動(dòng)消除器數(shù)據(jù)表

    TSMaster 測(cè)試報(bào)告生成器操作指南

    用戶在基于TSMaster軟件開(kāi)發(fā)測(cè)試用例時(shí),或需要使用TSMaster生成HTML報(bào)告時(shí),需要使用TSMaster測(cè)試報(bào)告生成器。1Test_Report說(shuō)明Test_Report是目前
    的頭像 發(fā)表于 08-03 08:21 ?587次閱讀
    TSMaster 測(cè)試報(bào)告<b class='flag-5'>生成器</b>操作指南

    生成對(duì)抗網(wǎng)絡(luò)(GANs)的原理與應(yīng)用案例

    相互競(jìng)爭(zhēng)的神經(jīng)網(wǎng)絡(luò)——生成器(Generator)和判別器(Discriminator),實(shí)現(xiàn)了高效、靈活的數(shù)據(jù)生成能力。本文將從GANs的原理、核心算法、以及多個(gè)應(yīng)用案例入手,深入探討這一前沿技術(shù)的內(nèi)涵與應(yīng)用。
    的頭像 發(fā)表于 07-09 11:34 ?1358次閱讀

    微軟Edge瀏覽器將引入AI主題生成器,為用戶提供獨(dú)特的主頁(yè)設(shè)計(jì)

    根據(jù)微軟的365產(chǎn)品規(guī)劃,他們計(jì)劃在Edge瀏覽器中添加人工智能主題生成器。這項(xiàng)創(chuàng)新功能允許用戶通過(guò)文字描述來(lái)創(chuàng)建個(gè)性化主題,人工智能系統(tǒng)將生成一系列預(yù)覽圖片,并將其作為瀏覽器主題。
    的頭像 發(fā)表于 05-13 15:16 ?799次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-在線二維碼生成器

    在線二維碼生成器允許用戶將文本、網(wǎng)址、圖片或其他數(shù)據(jù)轉(zhuǎn)換為二維碼形式。二維碼是一種特殊類型的條形碼,它可以通過(guò)掃描來(lái)快速識(shí)別和讀取信息。在線二維碼生成器使用特定的算法將這些信息編碼成二維碼,用戶可以
    發(fā)表于 04-24 17:00

    如何使用Python生成四位隨機(jī)數(shù)字

    為了實(shí)現(xiàn)這些目標(biāo),Python 為我們提供了random() 模塊。random() 是一個(gè)內(nèi)置的 Python 模塊,用于生成隨機(jī)數(shù)。
    的頭像 發(fā)表于 04-15 12:47 ?794次閱讀

    Minitab 交互式表格生成器

    生成器
    MinitabUG
    發(fā)布于 :2024年04月03日 15:58:54

    深度學(xué)習(xí)生成對(duì)抗網(wǎng)絡(luò)(GAN)全解析

    GANs真正的能力來(lái)源于它們遵循的對(duì)抗訓(xùn)練模式。生成器的權(quán)重是基于判別器的損失所學(xué)習(xí)到的。因此,生成器被它生成的圖像所推動(dòng)著進(jìn)行訓(xùn)練,很難知道生成的圖像是真的還是假的。
    發(fā)表于 03-29 14:42 ?4794次閱讀
    深度學(xué)習(xí)<b class='flag-5'>生成</b>對(duì)抗網(wǎng)絡(luò)(GAN)全解析

    函數(shù)發(fā)生器的作用,概念要點(diǎn)是什么

    函數(shù)生成器Python中非常強(qiáng)大的特性之一。它們?cè)试S我們以一種簡(jiǎn)潔且高效的方式生成迭代器,從而幫助我們更好地處理大量數(shù)據(jù)或者在特定條件下生成無(wú)限數(shù)據(jù)。在本文中,我們將探討函數(shù)
    的頭像 發(fā)表于 02-23 16:01 ?596次閱讀
    主站蜘蛛池模板: 久久精品亚洲精品国产色婷 | 99精品久久久久久久婷婷 | 四虎影在线永久免费观看 | 波多野结衣在线免费视频 | 亚欧精品一区二区三区 | 欧美在线三级 | 午夜神马 | 国产精品嫩草影院一二三区入口 | 亚洲成色在线综合网站 | 欧美一区二区三区免费看 | 四虎在线观看免费视频 | 久热精品在线视频 | 激情啪啪网站 | 天天操夜夜欢 | 中文字幕亚洲一区二区v@在线 | 99久久精品国产自免费 | 久久这里精品青草免费 | 国产真实野战在线视频 | 国产精品臀控福利在线观看 | 久久精品国产清自在天天线 | 国产精品久久久久久久成人午夜 | 国产亚洲高清在线精品不卡 | 黄色片啪啪 | 女性一级全黄生活片免费看 | 黄色片免费看视频 | 亚洲色啦啦狠狠网站 | 一区二区三区国模大胆 | 国产精品天天影视久久综合网 | 美女视频很黄很a免费国产 美女视频很黄很暴黄是免费的 | 萌白酱白丝护士服喷水铁牛tv | 国产精品美女一区二区三区 | 最新版天堂资源8网 | 好硬好大好爽女房东在线观看 | 天天谢天天干 | 天天干天天谢 | 午夜影院官网 | 亚洲区在线播放 | 欧美日韩一区二区三区视频 | 欧美18videosex性欧美1819 | 欧美三级一区二区 | 人人干人人爽 |