欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中的yeild關(guān)鍵字提高代碼執(zhí)行效率場(chǎng)景實(shí)例探究

 更新時(shí)間:2024年01月23日 09:27:08   作者:python學(xué)習(xí)與大數(shù)據(jù)分析  
在Python編程語(yǔ)言中,yeild是一個(gè)非常實(shí)用的關(guān)鍵字,它不僅可以幫助你編寫(xiě)更加簡(jiǎn)潔的代碼,還可以提高代碼的執(zhí)行效率,本文將詳細(xì)介紹yeild在Python中的使用方法,并通過(guò)示例代碼進(jìn)行演示,讓我們一起來(lái)探索這個(gè)強(qiáng)大的關(guān)鍵字吧

一、理解"yeild"關(guān)鍵字

"yeild"是Python中的一個(gè)特殊關(guān)鍵字,它用于在函數(shù)內(nèi)部生成一個(gè)生成器對(duì)象。生成器是一種可以在需要時(shí)按需生成值的迭代器,相比于傳統(tǒng)的列表或元組,生成器更加輕量級(jí)且內(nèi)存占用更少。通過(guò)使用"yeild"關(guān)鍵字,我們可以將一個(gè)函數(shù)變成一個(gè)生成器函數(shù),從而在需要時(shí)生成新的值。

如果說(shuō)到這里,你覺(jué)得還是不好理解,那么你可以簡(jiǎn)單粗暴的把yeild想象成一個(gè)跟return差不多的東西,但它跟return是有區(qū)別的。

但yield 不是真正的返回結(jié)果給你,而是暫停當(dāng)前函數(shù),返回一個(gè)迭代器。每一次迭代的時(shí)候,都返回一個(gè)新的數(shù)值。

但為什么不用return呢,因?yàn)閞eturn之后,return之后的代碼就不會(huì)再執(zhí)行了,相當(dāng)于只會(huì)返回一次值程序就結(jié)束了。

當(dāng)然在非無(wú)限循環(huán)的場(chǎng)景下,你完成可以將所有的值存放到列表或者元祖中,然后使用return一次性將所有結(jié)果返回。

但是這里有需要注意的地方,當(dāng)你需要返回的數(shù)據(jù)量很大的時(shí)候,程序會(huì)占用大量?jī)?nèi)存,這是很危險(xiǎn)的行為。

使用yeild呢,yeild返回的只是一個(gè)生成器,你每取值一次,生成器才給你返回一個(gè)真實(shí)值,這樣就可以大大減少機(jī)器性能壓力了。

二、"yeild"關(guān)鍵字的使用場(chǎng)景

無(wú)限序列:當(dāng)需要處理一個(gè)無(wú)限序列時(shí),使用"yeild"關(guān)鍵字可以避免一次性加載所有數(shù)據(jù)到內(nèi)存中,而是按需生成數(shù)據(jù)。

  • 大量數(shù)據(jù)處理:當(dāng)需要處理大量數(shù)據(jù)時(shí),使用"yeild"關(guān)鍵字可以減少內(nèi)存占用,提高程序的性能。例如,從文件中逐行讀取數(shù)據(jù)并進(jìn)行處理。

遞歸算法:使用"yeild"關(guān)鍵字可以將遞歸算法轉(zhuǎn)化為迭代算法,從而提高程序的性能。例如,計(jì)算階乘時(shí)可以使用"yeild"關(guān)鍵字。

三、實(shí)際代碼

def infinite_sequence():
    num = 0
    while True:
        """
        [來(lái)自python學(xué)習(xí)與大數(shù)據(jù)分析微信公眾號(hào)的友情提醒]
        這里的 yield 相當(dāng)于 return,但不是真正的返回,而是暫停當(dāng)前函數(shù),返回一個(gè)迭代器。每一次迭代的時(shí)候,都返回一個(gè)新的數(shù)值。
        但為什么不用return呢,因?yàn)閞eturn之后,return之后的代碼就不會(huì)再執(zhí)行了,相當(dāng)于只會(huì)返回一次值程序就結(jié)束了。
        當(dāng)然在非無(wú)限循環(huán)的場(chǎng)景下,你完成可以將所有的值存放到列表或者元祖中,然后使用return一次性將所有結(jié)果返回。
        但是這里有需要注意的地方,當(dāng)你需要返回的數(shù)據(jù)量很大的時(shí)候,程序會(huì)占用大量?jī)?nèi)存,這是很危險(xiǎn)的行為。
        使用yeild呢,yeild返回的只是一個(gè)生成器,你每取值一次,生成器才給你返回一個(gè)真實(shí)值,這樣就可以大大減少機(jī)器性能壓力了。
        """
        yield num
        num += 1
for i in infinite_sequence():
    print(i)

在上面的代碼中,我們定義了一個(gè)名為infinite_sequence的生成器函數(shù),它會(huì)生成一個(gè)無(wú)限的整數(shù)序列。通過(guò)使用yeild關(guān)鍵字,我們可以在每次迭代時(shí)生成一個(gè)新的值。

下面我們?cè)賮?lái)看下讀取大數(shù)據(jù)量文件時(shí),使用yeild的場(chǎng)景:

def process_data(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            """
            [來(lái)自python學(xué)習(xí)與大數(shù)據(jù)分析微信公眾號(hào)的友情提醒]
            假設(shè):file_path這個(gè)文件的數(shù)據(jù)量很大的時(shí)候,比如成千上萬(wàn)行的時(shí)候,
            如果你是直接將數(shù)據(jù)放到一個(gè)變量里return返回的話,就會(huì)大量占用內(nèi)存。
            """
            yield line.strip()
data = process_data('monitor.log')
for line in data:
    # 處理每一行數(shù)據(jù),減少內(nèi)存占用
    print(line)

當(dāng)然了,如果你在調(diào)試代碼的時(shí)候,不想使用for循環(huán)來(lái)遍歷所有的生成器數(shù)據(jù),你可以使用next()方法來(lái)取得生成器的下一個(gè)值。

def process_data(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            """
            [來(lái)自python學(xué)習(xí)與大數(shù)據(jù)分析微信公眾號(hào)的友情提醒]
            假設(shè):file_path這個(gè)文件的數(shù)據(jù)量很大的時(shí)候,比如成千上萬(wàn)行的時(shí)候,
            如果你是直接將數(shù)據(jù)放到一個(gè)變量里return返回的話,就會(huì)大量占用內(nèi)存。
            """
            yield line.strip()
data = process_data('monitor.log')
# for line in data:
#     # 處理每一行數(shù)據(jù),減少內(nèi)存占用
#     print(line)
# 當(dāng)然了,除了通過(guò)上面的for循環(huán)來(lái)獲取數(shù)據(jù)外,你還可以通過(guò)next()函數(shù)來(lái)獲取數(shù)據(jù)。
print(next(data))
print(next(data))
print(next(data))

以上就是yeild的一些使用方法及注意事項(xiàng)。注:以上代碼在我本地均運(yùn)行通過(guò)了的(有圖為證,哈哈),大家只需要把代碼中涉及到的文件地址改成自己的地址即可,更多關(guān)于Python yeild關(guān)鍵字的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 多線程的實(shí)例詳解

    Python 多線程的實(shí)例詳解

    這篇文章主要介紹了 Python 多線程的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握多線程的知識(shí),需要的朋友可以參考下
    2017-09-09
  • python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作

    python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作

    這篇文章主要為大家介紹了python  dataprep庫(kù)簡(jiǎn)化加速數(shù)據(jù)科學(xué)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python中順序表原理與實(shí)現(xiàn)方法詳解

    Python中順序表原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Python中順序表原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python順序表的概念、原理及增刪查等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)繪制Matlab格式的地圖邊框的示例代碼

    Python實(shí)現(xiàn)繪制Matlab格式的地圖邊框的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)繪制Matlab格式的地圖邊框,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-09-09
  • python?面向?qū)ο箝_(kāi)發(fā)及基本特征

    python?面向?qū)ο箝_(kāi)發(fā)及基本特征

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類(lèi)”和 “對(duì)象”來(lái)實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對(duì) “類(lèi)”和“對(duì)象” 的使用,今天給大家介紹下python?面向?qū)ο箝_(kāi)發(fā)及基本特征,感興趣的朋友一起看看吧
    2022-03-03
  • Python和RabbitMQ進(jìn)行消息傳遞和處理方式

    Python和RabbitMQ進(jìn)行消息傳遞和處理方式

    這篇文章主要介紹了Python和RabbitMQ進(jìn)行消息傳遞和處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • python pyecharts庫(kù)的用法大全

    python pyecharts庫(kù)的用法大全

    這篇文章主要介紹了python pyecharts庫(kù)的用法大全,pyecharts 是一個(gè)用于生成 Echarts 圖表的類(lèi)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • python學(xué)習(xí)之基于Python的人臉識(shí)別技術(shù)學(xué)習(xí)

    python學(xué)習(xí)之基于Python的人臉識(shí)別技術(shù)學(xué)習(xí)

    面部識(shí)別技術(shù)的應(yīng)用越來(lái)越廣泛,它廣泛應(yīng)用于安全系統(tǒng)、人機(jī)交互、社交媒體、醫(yī)療保健等領(lǐng)域。本文介紹了基于Python的人臉識(shí)別技術(shù),感興趣的小伙伴可以參考閱讀
    2023-03-03
  • sqlalchemy對(duì)象轉(zhuǎn)dict的示例

    sqlalchemy對(duì)象轉(zhuǎn)dict的示例

    這篇文章主要介紹了sqlalchemy對(duì)象轉(zhuǎn)dict的示例,需要的朋友可以參考下
    2014-04-04
  • python打包發(fā)布pypi及更新全部流程

    python打包發(fā)布pypi及更新全部流程

    這篇文章主要介紹了python打包發(fā)布pypi及更新全部流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論