日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

python生成器是什么

python爬蟲知識(shí)分享 ? 來源:python爬蟲知識(shí)分享 ? 作者:python爬蟲知識(shí)分享 ? 2022-02-24 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python生成器

1. 什么是生成器?

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

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

當(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)演示過,正常我們使用列表推導(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 沒有接任何值,則返回 None

yield 雖然返回了,但是函數(shù)并沒有結(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é)過的通過切片訪問列表中的元素不一樣,它沒有那么直觀。

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

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

>>> 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)講過

使用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é)束

通過下面的示例可以很輕松地理解這一過程(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

在沒有元素可返回時(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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    322

    瀏覽量

    22816
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4889

    瀏覽量

    90327
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    探索 SN54LS181、SN54S181、SN74LS181 和 SN74S181 算術(shù)邏輯單元/函數(shù)生成器

    探索 SN54LS181、SN54S181、SN74LS181 和 SN74S181 算術(shù)邏輯單元/函數(shù)生成器 在電子工程師的日常設(shè)計(jì)工作中,選擇合適的芯片是實(shí)現(xiàn)高效、可靠電路的關(guān)鍵。今天,我們就來
    的頭像 發(fā)表于 04-22 16:40 ?274次閱讀

    GS4901B/GS4900B:視頻與音頻時(shí)鐘及定時(shí)生成的理想之選

    GS4901B/GS4900B:視頻與音頻時(shí)鐘及定時(shí)生成的理想之選 在電子設(shè)計(jì)領(lǐng)域,時(shí)鐘和定時(shí)生成器對(duì)于確保系統(tǒng)的穩(wěn)定運(yùn)行和精確同步至關(guān)重要。今天,我們就來深入探討一下 Gennum 公司
    的頭像 發(fā)表于 04-15 10:10 ?146次閱讀

    ICS2008B:SMPTE時(shí)間碼接收器/生成器的技術(shù)解析

    ICS2008B:SMPTE時(shí)間碼接收器/生成器的技術(shù)解析 在多媒體技術(shù)飛速發(fā)展的今天,時(shí)間碼的精確控制對(duì)于音視頻同步至關(guān)重要。ICS2008B作為一款SMPTE時(shí)間碼接收器/生成器芯片,為多媒體
    的頭像 發(fā)表于 04-13 18:10 ?389次閱讀

    AD9547:網(wǎng)絡(luò)時(shí)鐘生成與同步的理想之選

    AD9547:網(wǎng)絡(luò)時(shí)鐘生成與同步的理想之選 在電子設(shè)計(jì)領(lǐng)域,時(shí)鐘的精準(zhǔn)性和穩(wěn)定性對(duì)于系統(tǒng)的正常運(yùn)行至關(guān)重要。AD9547作為一款雙/四輸入網(wǎng)絡(luò)時(shí)鐘生成器/同步器,為眾多系統(tǒng)提供了出色的時(shí)鐘同步
    的頭像 發(fā)表于 04-13 11:05 ?200次閱讀

    探秘ICS841402I:PCIe與sRIO時(shí)鐘生成的理想之選

    探秘ICS841402I:PCIe與sRIO時(shí)鐘生成的理想之選 在電子設(shè)計(jì)領(lǐng)域,時(shí)鐘信號(hào)的穩(wěn)定性和準(zhǔn)確性對(duì)于系統(tǒng)的性能至關(guān)重要。今天,我們就來深入了解一款優(yōu)化的PCIe和sRIO時(shí)鐘生成器
    的頭像 發(fā)表于 04-12 12:40 ?433次閱讀

    IDT 843242:晶體到3.3V LVPECL頻率合成器的深度解析

    IDT 843242:晶體到3.3V LVPECL頻率合成器的深度解析 引言 在電子設(shè)計(jì)領(lǐng)域,頻率合成器是實(shí)現(xiàn)精確時(shí)鐘信號(hào)生成的關(guān)鍵組件。IDT的843242頻率合成器專為以太網(wǎng)參考時(shí)
    的頭像 發(fā)表于 04-12 10:40 ?436次閱讀

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等設(shè)備的頻率生成器解決方案

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等設(shè)備的頻率生成器解決方案 在電子設(shè)備的設(shè)計(jì)中,頻率生成器扮演著至關(guān)重要的角色,它為各種高速接口提供穩(wěn)定的時(shí)鐘信號(hào),確保設(shè)備的正常運(yùn)行
    的頭像 發(fā)表于 03-29 17:05 ?924次閱讀

    SBC案例生成器對(duì)VisionFive2的支持

    最近收到了我的 VisionFive2,并且是 SBC 模型框架和 SBC 案例生成器的開發(fā)人員,我為那些對(duì)標(biāo)準(zhǔn)和自定義案例感興趣的人在這兩個(gè)應(yīng)用程序中添加了對(duì) VisionFive2 SBC
    發(fā)表于 03-18 08:21

    探索Renesas 9FGV0431:低功耗PCIe時(shí)鐘生成器的卓越之選

    探索Renesas 9FGV0431:低功耗PCIe時(shí)鐘生成器的卓越之選 引言 在當(dāng)今的電子設(shè)計(jì)領(lǐng)域,PCIe技術(shù)的廣泛應(yīng)用對(duì)時(shí)鐘生成器提出了更高的要求。Renesas的9FGV0431作為一款專為
    的頭像 發(fā)表于 03-15 17:25 ?1148次閱讀

    如何在LTspice仿真中實(shí)現(xiàn)偽隨機(jī)數(shù)和真隨機(jī)數(shù)的生成

    to reseed the MC generator(使用時(shí)鐘重新設(shè)置MC生成器的隨機(jī)種子)選項(xiàng)。文章探討了偽隨機(jī)數(shù)和真隨機(jī)數(shù)之間的利弊權(quán)衡,同時(shí)比較了蒙特卡羅統(tǒng)計(jì)仿真與更有針對(duì)性的最壞情況仿真之間的差異。
    的頭像 發(fā)表于 01-09 14:08 ?4870次閱讀
    如何在LTspice仿真中實(shí)現(xiàn)偽隨機(jī)數(shù)和真隨機(jī)數(shù)的<b class='flag-5'>生成</b>

    如何通過地址生成器實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)特征圖的padding?

    ,從而使卷積輸出特征圖結(jié)果滿足我們的需求,這種補(bǔ)零的操作稱之為padding,如下圖所示。 關(guān)于padding的實(shí)現(xiàn),一般有兩種操作,第一種是使用稀疏地址生成器,尋找padding數(shù)據(jù)地址的規(guī)律,當(dāng)
    發(fā)表于 10-22 08:15

    ?CDCDLP223 時(shí)鐘合成器技術(shù)文檔總結(jié)

    CDCDLP223是一款基于PLL的高性能時(shí)鐘合成器,針對(duì)DLP?系統(tǒng)進(jìn)行了優(yōu)化。它使用20 MHz晶體生成基頻,并導(dǎo)出100 MHz HCLK和300 MHz HCLK輸出的頻率。此外,該CDCDLP223在20 MHz輸出端生成
    的頭像 發(fā)表于 09-19 10:48 ?930次閱讀
    ?CDCDLP223 時(shí)鐘合<b class='flag-5'>成器</b>技術(shù)文檔總結(jié)

    非對(duì)稱密鑰生成和轉(zhuǎn)換規(guī)格詳解

    生成 以字符串參數(shù)生成RSA密鑰,具體的“字符串參數(shù)”由“RSA密鑰類型”和“素?cái)?shù)個(gè)數(shù)”使用符號(hào)“|”拼接而成,用于在創(chuàng)建非對(duì)稱密鑰生成器時(shí),指定密鑰規(guī)格。 說明:生成RSA非對(duì)稱密
    發(fā)表于 09-01 07:50

    為什么無法在DAVE? IDE 中導(dǎo)入和編譯 XMC4402/XMC4200 項(xiàng)目?

    該項(xiàng)目不可用。 2)即使項(xiàng)目出現(xiàn)在工作區(qū)中,我也無法編譯它。 3 此外,導(dǎo)入后DAVE?代碼生成器不起作用。
    發(fā)表于 08-08 07:19

    PanDao:實(shí)際約束條件下成像系統(tǒng)的初始結(jié)構(gòu)的生成

    的平均RMS光斑尺寸約為55 μm,色差校正效果中等?;谕纫?guī)格與約束,我們采用自主研發(fā)的FTR初始透鏡生成器,在數(shù)分鐘內(nèi)即創(chuàng)建出多個(gè)更加優(yōu)質(zhì)的設(shè)計(jì)方案。圖1展示了由FTR程序生成的五類不同透鏡系統(tǒng)
    發(fā)表于 05-07 08:57
    青川县| 特克斯县| 文成县| 清苑县| 交城县| 阿尔山市| 芷江| 玉屏| 新蔡县| 柳江县| 莱西市| 兴安盟| 博湖县| 兴文县| 曲阜市| 德州市| 那曲县| 临泉县| 济南市| 繁峙县| 禹城市| 宁晋县| 宜宾市| 五台县| 太康县| 安化县| 四川省| 甘谷县| 洮南市| 开化县| 巢湖市| 安塞县| 隆子县| 卓尼县| 白沙| 永嘉县| 玉田县| 剑川县| 凤山县| 涟源市| 柞水县|