最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中yield返回生成器的詳細方法

 更新時間:2021年11月03日 15:54:50   作者:python學(xué)習(xí)者0  
這篇文章主要介紹了Python中的yield返回生成器,生成器是Python編程進階中的重要知識點,需要的朋友可以參考下,希望能夠給你帶來幫助

最簡單、直觀的認(rèn)識,將 yield 看做 return 對待,只是 return 返回一個值,而 yield 返回一個生成器。

要理解 yield 的作用,必須理解生成器是什么?

在理解生成器之前,必須先理解迭代器。

一、迭代器

逐項讀取列表,稱為迭代。

mylist = [1, 2, 3]
for i in mylist: # 可迭代對象
    print(i)

列表解析式同樣是一個迭代器。

mylist = [x*x for x in range(3)]
for i in mylist:
    print(i)
'''
0
1
4
'''

所有 for...in... 都是迭代器,包括列表、字符串、文件等等。

但是,迭代器所有的值都存儲在內(nèi)存中,十分浪費內(nèi)存。

因此有了生成器的概念。

二、生成器

生成器是一種迭代器,這種迭代器只能迭代一次。

生成器不會一次性存儲所有的值,而是會動態(tài)的生成值。

mygenerator = (x*x for x in range(3))
for i in mygenerator:
    print(i)

生成器只可執(zhí)行一次,再次執(zhí)行時不會輸出任何東西。

三、yield

1.例子一

yield 類似于 return 關(guān)鍵字,只是函數(shù)將返回一個生成器。

# 創(chuàng)建生成器
def createGenerator():
    mylist = range(10)
    for i in mylist:
        print(i) # 驗證函數(shù)調(diào)用時并無執(zhí)行
        yield i*i
mygenerator = createGenerator()    
print(mygenerator) 
# <generator object createGenerator at 0x0000029E88FDCA50>
# 使用生成器
for i in mygenerator:
    print(i)
# 再次執(zhí)行 返回為空 沒有值了

函數(shù)將返回一組只需要讀取一次的值,可以大大的提升代碼性能。

在調(diào)用函數(shù)時,函數(shù)體中的代碼并不會執(zhí)行,函數(shù)只返回生成器對象。

代碼每次從使用生成器時停止的地方繼續(xù)。

2.例子二

#Python學(xué)習(xí)交流群:531509025
# 學(xué)習(xí)另外一個例子
def foo():
    print("starting...")
    while True:
        res = yield 4 # 函數(shù)并不真正執(zhí)行
        print("res:", res)
g = foo() # 得到一個生成器對象
print(next(g)) # 真正執(zhí)行
print("*"*20)
print(next(g)) # 從上一次停止的地方繼續(xù)執(zhí)行
'''
starting...
4
********************
res: None
4
'''
print(g.send(7))

執(zhí)行 yield 之后,才會跳出 while 循環(huán)。

next 函數(shù)用于執(zhí)行下一步操作。

send 函數(shù)用于發(fā)送一個參數(shù)給生成器。且 send 方法中包含 next 方法。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Python實現(xiàn)時間序列變化點檢測功能

    Python實現(xiàn)時間序列變化點檢測功能

    平穩(wěn)性是時間序列分析與預(yù)測的核心概念,在平穩(wěn)條件下,時間序列的統(tǒng)計特性(如均值)在時間維度上保持不變,僅存在隨機波動,但是時間序列通常會經(jīng)歷結(jié)構(gòu)性斷裂或變化,本文給大家介紹了Python實現(xiàn)時間序列變化點檢測功能,需要的朋友可以參考下
    2024-09-09
  • python使用jenkins發(fā)送企業(yè)微信通知的實現(xiàn)

    python使用jenkins發(fā)送企業(yè)微信通知的實現(xiàn)

    公司使用的是企業(yè)微信,因此考慮Jenkins通知企業(yè)微信機器人的實現(xiàn)方式,本文主要介紹了python使用jenkins發(fā)送企業(yè)微信通知的實現(xiàn),感興趣的可以了解一下
    2021-06-06
  • Python反爬實戰(zhàn)掌握酷狗音樂排行榜加密規(guī)則

    Python反爬實戰(zhàn)掌握酷狗音樂排行榜加密規(guī)則

    最新的酷狗音樂反爬來襲,本文介紹如何利用Python掌握酷狗排行榜加密規(guī)則,本章內(nèi)容只限學(xué)習(xí),切勿用作其他用途?。。。。? 有需要的朋友可以借鑒參考下
    2021-10-10
  • Python學(xué)習(xí)之名字,作用域,名字空間(下)

    Python學(xué)習(xí)之名字,作用域,名字空間(下)

    這篇文章主要介紹了Python學(xué)習(xí)之名字,作用域,名字空間,緊接上一篇文章內(nèi)容展開全文,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-05-05
  • Django 路由控制的實現(xiàn)代碼

    Django 路由控制的實現(xiàn)代碼

    這篇文章主要介紹了Django 路由控制的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 線程安全及Python中的GIL原理分析

    線程安全及Python中的GIL原理分析

    這篇文章主要介紹了線程安全及Python中的GIL原理,較為詳細的分析了線程安全及Python中的GIL相關(guān)概念、原理、理解及操作注意事項,需要的朋友可以參考下
    2019-10-10
  • Python實現(xiàn)批量獲取當(dāng)前文件夾下的文件名

    Python實現(xiàn)批量獲取當(dāng)前文件夾下的文件名

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)批量獲取當(dāng)前文件夾下的文件名,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Python中類創(chuàng)建和實例化的過程詳解

    Python中類創(chuàng)建和實例化的過程詳解

    這篇文章主要介紹了Python中類創(chuàng)建和實例化過程,文中通過代碼示例講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • Python實現(xiàn)常見網(wǎng)絡(luò)通信的示例詳解

    Python實現(xiàn)常見網(wǎng)絡(luò)通信的示例詳解

    這篇文章主要為大家詳細介紹了Python實現(xiàn)常見網(wǎng)絡(luò)通信的相關(guān)方法,文中的示例代碼講解詳細,感興趣的小伙伴就跟隨小編一起學(xué)習(xí)一下吧
    2025-04-04
  • Python常用內(nèi)置模塊之xml模塊(詳解)

    Python常用內(nèi)置模塊之xml模塊(詳解)

    下面小編就為大家?guī)硪黄狿ython常用內(nèi)置模塊之xml模塊(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

伊宁市| 靖西县| 穆棱市| 冕宁县| 贵阳市| 芮城县| 鄢陵县| 肥城市| 丽江市| 吴堡县| 奈曼旗| 牡丹江市| 鱼台县| 开封县| 涿鹿县| 滨海县| 上杭县| 兰考县| 西盟| 井研县| 新化县| 电白县| 乌恰县| 华宁县| 志丹县| 乐都县| 广灵县| 泌阳县| 广饶县| 米易县| 资溪县| 塘沽区| 银川市| 台州市| 房山区| 九寨沟县| 石门县| 乌拉特后旗| 镇坪县| 华容县| 兰溪市|