国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    瀏覽量

    22707
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在LTspice仿真中實現偽隨機數和真隨機數的生成

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

    如何通過地址生成器實現神經網絡特征圖的padding?

    ,從而使卷積輸出特征圖結果滿足我們的需求,這種補零的操作稱之為padding,如下圖所示。 關于padding的實現,一般有兩種操作,第一種是使用稀疏地址生成器,尋找padding數據地址的規律,當
    發表于 10-22 08:15

    高性能射頻合成器評估模塊LMX2571EPEVM技術解析

    Texas Instruments LMX2571EPEV射頻合成器評估模塊 (EVM) 設計用于LMX2571-EP低功耗、高性能射頻合成器。Texas Instruments LMX2571-EP可生成10MHz至1344M
    的頭像 發表于 09-23 11:11 ?888次閱讀
    高性能射頻合<b class='flag-5'>成器</b>評估模塊LMX2571EPEVM技術解析

    ?CDCDLP223 時鐘合成器技術文檔總結

    CDCDLP223是一款基于PLL的高性能時鐘合成器,針對DLP?系統進行了優化。它使用20 MHz晶體生成基頻,并導出100 MHz HCLK和300 MHz HCLK輸出的頻率。此外,該CDCDLP223在20 MHz輸出端生成
    的頭像 發表于 09-19 10:48 ?763次閱讀
    ?CDCDLP223 時鐘合<b class='flag-5'>成器</b>技術文檔總結

    非對稱密鑰生成和轉換規格詳解

    生成 以字符串參數生成RSA密鑰,具體的“字符串參數”由“RSA密鑰類型”和“素數個數”使用符號“|”拼接而成,用于在創建非對稱密鑰生成器時,指定密鑰規格。 說明:生成RSA非對稱密
    發表于 09-01 07:50

    為什么無法在DAVE? IDE 中導入和編譯 XMC4402/XMC4200 項目?

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

    PanDao:實際約束條件下成像系統的初始結構的生成

    的平均RMS光斑尺寸約為55 μm,色差校正效果中等。基于同等規格與約束,我們采用自主研發的FTR初始透鏡生成器,在數分鐘內即創建出多個更加優質的設計方案。圖1展示了由FTR程序生成的五類不同透鏡系統
    發表于 05-07 08:57

    python入門圣經-高清電子書(建議下載)

    此資料內容是一本針對所有層次的Python 讀者而作的Python 入門電子書。 全書分兩部分:第一部分介紹用Python 編程所必須了解的基本概念,包括matplotlib、NumPy
    發表于 04-10 16:53

    EB Tresos驗證步驟失敗是什么原因?

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

    使用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 ?884次閱讀

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

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

    S32G399 GoldVIP網關執行失敗的原因?

    我正在使用S32G399來編譯 GoldVip 網關代碼。 首先,我使用 EB tresos 生成器 successiful。 然后我更改 launch_cfg.bat。文件如下 然后,我啟動 launch.bat make -j 命令。 但得到錯誤。您能幫忙看看這個問題嗎?
    發表于 04-01 08:18

    DS855調相直接數字合成器適合哪些場景?

    :DS855可作為射頻信號源生成器,廣泛應用于各種射頻測試與應用場景。其精確的頻率與相位控制能力使其能夠生成高質量的射頻信號,滿足射頻測試與應用的多樣化需求。儀器與半導體測試儀:在儀器與半導體測試儀中
    發表于 03-21 09:28

    《AI Agent 應用與項目實戰》閱讀心得3——RAG架構與部署本地知識庫

    應用。第六章深入探討了RAG架構的工作原理,該技術通過在推理過程中實時檢索和注入外部知識來增強模型的生成能力。RAG架構的核心是檢索器和生成器兩大模塊,檢索器負責從知識庫中找到與當前查詢相關的文檔片段,生成器
    發表于 03-07 19:49