国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

從這五個(gè)方面提升python的執(zhí)行效率,才是軟件開發(fā)層面需要考慮的問題!

這篇具有很好參考價(jià)值的文章主要介紹了從這五個(gè)方面提升python的執(zhí)行效率,才是軟件開發(fā)層面需要考慮的問題!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

python作為使用最廣泛的編程語言之一,有著無窮無盡的第三方非標(biāo)準(zhǔn)庫(kù)的支持。

簡(jiǎn)單的語法、優(yōu)雅的代碼塊使其在各個(gè)業(yè)務(wù)領(lǐng)域都混的風(fēng)生水起,除了這些優(yōu)點(diǎn),python有一個(gè)經(jīng)常被人詬病的缺點(diǎn)那就是運(yùn)行速度。

小伙伴通過下面的五個(gè)python開發(fā)技巧,來充分提高python代碼塊的運(yùn)行速度,并且提供了各個(gè)python技巧的使用后的運(yùn)行時(shí)間的統(tǒng)計(jì)來佐證。

開始之前小伙伴先可以開發(fā)一個(gè)統(tǒng)計(jì)函數(shù)運(yùn)行時(shí)間的python裝飾器用于后面我們對(duì)各個(gè)python技巧使用后的時(shí)間統(tǒng)計(jì)。

# 導(dǎo)入時(shí)間提取的time模塊
from time import time

import dis


def compute_time(func_):
    '''
    計(jì)算函數(shù)的運(yùn)行時(shí)間
    '''

    def func_time(*arg, **kw):
        t1 = time()
        result = func_(*arg, **kw)
        t2 = time()
        print(f"{func_.__name__: >10} : {t2 - t1:.6f} 秒")
        return result

    return func_time

上述的compute_time時(shí)間計(jì)算函數(shù)我們開發(fā)好了,可以開發(fā)一個(gè)hello_world函數(shù)測(cè)試一下使用是否正常。

@compute_time
def hello_world():
    print("hello_world!")


hello_world()

# hello_world!
# hello_world : 0.000000 秒

通過hello_world函數(shù)的測(cè)試,證明我們的時(shí)間裝飾器compute_time能夠正常統(tǒng)計(jì)出函數(shù)所運(yùn)行的時(shí)間。

接下來,我們開始正式的介紹下面的五種方式來提高python的運(yùn)行速度并提供時(shí)間運(yùn)行的結(jié)果。

1、合理使用標(biāo)準(zhǔn)或非標(biāo)準(zhǔn)庫(kù)

在開發(fā)過程中絕對(duì)不能小看python的標(biāo)準(zhǔn)或非標(biāo)準(zhǔn)庫(kù),說實(shí)話我們自己有時(shí)候?qū)懙耐瑯拥臉I(yè)務(wù)代碼塊確實(shí)是沒有大佬們完美。

比如下面這個(gè)業(yè)務(wù)我們需要將一個(gè)python列表中的值轉(zhuǎn)換成字符串,首先看看下面的代碼塊的寫法。

# 初始化一個(gè)list列表
list_ = ['a', 'b', 'c'] * 10000


@compute_time
def func_1(list_=None):
    '''
    列表元素轉(zhuǎn)字符串函數(shù)
    '''
    str_ = ''
    for s in list_:
        str_ = str_ + s
    return str_


func_1(list_)


# func_1 : 0.001999 秒

通過上面的func_1函數(shù)的執(zhí)行情況使用自己寫的傳統(tǒng)的方式來轉(zhuǎn)換步驟比較繁雜,并且花費(fèi)了0.001999 秒的時(shí)間。

@compute_time
def func_2(list_=None):
    '''
    列表元素轉(zhuǎn)字符串
    '''
    return ''.join(list_)


func_2(list_)

# func_2 : 0.000000 秒

相比func_1函數(shù)的運(yùn)行時(shí)間,func_2運(yùn)行的時(shí)間幾乎可以忽略不計(jì),六位數(shù)的小數(shù)根本看不出來變化。

2、減少循環(huán)的使用

從平常開發(fā)的過程中其實(shí)已經(jīng)發(fā)現(xiàn),使用列表推導(dǎo)式、迭代式等的可序列化數(shù)據(jù)處理方式要比for循環(huán)更加的便捷、高效。

下面我們同樣可以通過一個(gè)例子來說明問題,比如我們需要挑選出一個(gè)list列表中可以被2整除的數(shù)。

# 初始化循環(huán)次數(shù)n
n = 100000


@compute_time
def func_3(n=None):
    list_ = []
    for m in range(n):
        if m % 2 == 0:
            list_.append(m)
    return list_


@compute_time
def func_4(n=None):
    return [m for m in range(n) if m % 2 == 0]


func_3(n)

func_4(n)

# func_3 : 0.004986 秒
# func_4 : 0.003014 秒

通過func_3函數(shù)、func_4函數(shù)的比較,首先func_4的方式比func_3精簡(jiǎn)了許多。

并且時(shí)間上func_4使用列表推導(dǎo)式的方式比普通的for循環(huán)運(yùn)行速度上快了1/4的時(shí)間。

3、注意重復(fù)代碼運(yùn)行

關(guān)于代碼的重復(fù)運(yùn)行這個(gè)在我們通常的開發(fā)方式中都能體會(huì)到,也就是本可以作為公共代碼塊運(yùn)行一次就可以。

可以卻將能夠公共使用的代碼塊加入到了循環(huán)當(dāng)中,這樣只會(huì)影響代碼塊的執(zhí)行效率。

比如我們需要使用python的re模塊去搜索字符串中的某一些元素,下面通過兩種方式來比較時(shí)間結(jié)果。

# 導(dǎo)入正則表達(dá)式匹配模塊
import re


@compute_time
def func_5(str_=None):
    for s in str_:
        result = re.search(r'a*[a-z]?c', s)


@compute_time
def func_6(str_=None):
    repx = re.compile(r'a*[a-z]?c')
    for s in str_:
        result = repx.search(s)


func_5('abcdefg1234oks' * 1000)

func_6('abcdefg1234oks' * 1000)

# func_5 : 0.006999 秒
# func_6 : 0.002000 秒

對(duì)比func_5和func_6的業(yè)務(wù)實(shí)現(xiàn)方式,我們將re模塊的compile正則匹配對(duì)象直接放到for循環(huán)的外層,運(yùn)行時(shí)間直接就減少了3倍不止。

是因?yàn)樵谘h(huán)中直接使用search匹配正則對(duì)象,會(huì)在循環(huán)中不斷地創(chuàng)建正則匹配對(duì)象,這樣就
增加了for循環(huán)的處理負(fù)擔(dān),導(dǎo)致速度變慢。

4、減少全局變量使用

在說明這一點(diǎn)的時(shí)候,我們要明白全局變量在程序運(yùn)行的過程中是一直存在的不會(huì)消失。

全局變量太多就會(huì)導(dǎo)致運(yùn)行期間占用的內(nèi)存太大,相比全局變量使用局部變量就會(huì)變得更加的高效。

下面我們通過兩種方式的使用實(shí)例,來對(duì)比全局變量和局部變量的運(yùn)行時(shí)間。

mes_1 = 'ss1'

mes_2 = 'ss2'

mes_3 = 'ss3'


@compute_time
def func_7():
    result = mes_1 + mes_2 + mes_3
    return result


@compute_time
def func_8():
    me_1 = 'ss1'
    me_2 = 'ss2'
    me_3 = 'ss3'
    result = me_1 + me_2 + me_3
    return result


func_7()

func_8()


# func_7 : 0.000997 秒
# func_8 : 0.000000 秒

上面我們做了一個(gè)普通的加法計(jì)算已經(jīng)說明了問題,func_8函數(shù)使用局部變量的方式確實(shí)速度更快。

5、使用合理的數(shù)據(jù)結(jié)構(gòu)

在大多數(shù)的python開發(fā)過程中,想必很多人都是為了方便更多的時(shí)候使用的是list列表的方式來處理數(shù)據(jù)。

Python 有四種內(nèi)置的數(shù)據(jù)結(jié)構(gòu):列表、元組、集合、字典,在合適的業(yè)務(wù)場(chǎng)景中使用合適的數(shù)據(jù)結(jié)構(gòu)來處理數(shù)據(jù)同樣能提高計(jì)算的執(zhí)行效率。

比如:下面我們將從一個(gè)list列表和tuple元組來提取對(duì)應(yīng)索引位置上面的值。

@compute_time
def func_9():
    data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    print(data[3])


@compute_time
def func_10():
    data = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
    print(data[3])

func_9()

func_10()

# func_9 : 0.000000 秒
# func_10 : 0.000000 秒

通過執(zhí)行func_9和func_10函數(shù),我們發(fā)現(xiàn)時(shí)間上兩者的差距不大,起碼在六位小數(shù)之內(nèi)是分辨不出結(jié)果的。

print('func_9匯編產(chǎn)生的機(jī)器碼:')
dis.dis(func_9)

print('func_10匯編產(chǎn)生的機(jī)器碼:')
dis.dis(func_10)

最后,我們分別查看了func_9和func_10的匯編機(jī)器碼,發(fā)現(xiàn)明顯list列表處理產(chǎn)生的機(jī)器碼更多。

# func_9匯編產(chǎn)生的機(jī)器碼:
#  30           0 LOAD_GLOBAL              0 (time)
#               2 CALL_FUNCTION            0
#               4 STORE_FAST               2 (t1)
#
#  31           6 LOAD_DEREF               0 (func_)
#               8 LOAD_FAST                0 (arg)
#              10 LOAD_FAST                1 (kw)
#              12 CALL_FUNCTION_EX         1
#              14 STORE_FAST               3 (result)
#
#  32          16 LOAD_GLOBAL              0 (time)
#              18 CALL_FUNCTION            0
#              20 STORE_FAST               4 (t2)
#
#  33          22 LOAD_GLOBAL              1 (print)
#              24 LOAD_DEREF               0 (func_)
#              26 LOAD_ATTR                2 (__name__)
#              28 LOAD_CONST               1 (' >10')
#              30 FORMAT_VALUE             4 (with format)
#              32 LOAD_CONST               2 (' : ')
#              34 LOAD_FAST                4 (t2)
#              36 LOAD_FAST                2 (t1)
#              38 BINARY_SUBTRACT
#              40 LOAD_CONST               3 ('.6f')
#              42 FORMAT_VALUE             4 (with format)
#              44 LOAD_CONST               4 (' 秒')
#              46 BUILD_STRING             4
#              48 CALL_FUNCTION            1
#              50 POP_TOP
#
#  34          52 LOAD_FAST                3 (result)
#              54 RETURN_VALUE
# func_10匯編產(chǎn)生的機(jī)器碼:
#  30           0 LOAD_GLOBAL              0 (time)
#               2 CALL_FUNCTION            0
#               4 STORE_FAST               2 (t1)
#
#  31           6 LOAD_DEREF               0 (func_)
#               8 LOAD_FAST                0 (arg)
#              10 LOAD_FAST                1 (kw)
#              12 CALL_FUNCTION_EX         1
#              14 STORE_FAST               3 (result)

往期精彩

這款基于ChatGPT4的開發(fā)工具,程序猿要小心了!

剛剛在GitHub發(fā)現(xiàn)的開數(shù)據(jù)源可視化分析工具,只通過配置的方式即可完成個(gè)性化的可視化應(yīng)用制作!

自動(dòng)化辦公:python文件分類器,一鍵完成雜亂無章的文件整理,已打包成exe可自行下載!文章來源地址http://www.zghlxwxcb.cn/news/detail-413276.html

到了這里,關(guān)于從這五個(gè)方面提升python的執(zhí)行效率,才是軟件開發(fā)層面需要考慮的問題!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 提升Python os.system調(diào)用Shell的執(zhí)行效率

    ? 最近做了一個(gè)SDN流表的實(shí)驗(yàn),在這個(gè)實(shí)驗(yàn)中,需要批量刪除大量的流表項(xiàng),使用了shell腳本。然而,我的流表數(shù)據(jù)存放在python字典中,我一開始是考慮每次讀取一個(gè)字典并構(gòu)造一條指令調(diào)用os.system(),然后發(fā)現(xiàn)這種方法效率非常糟糕。 我考慮問題可能出現(xiàn)在os.system()的調(diào)用上

    2023年04月21日
    瀏覽(15)
  • 解決流水線瓶頸、提升編碼效率的五個(gè)方法(上篇)

    不是吹牛,但我所管理的開發(fā)團(tuán)隊(duì)在軟件開發(fā)速度上表現(xiàn)出色,能夠高質(zhì)量地編寫代碼,并在白噪聲的陪伴下保持高效。 但就像所有的故事一樣,一開始并不是這樣的,甚至相去甚遠(yuǎn)。我們經(jīng)歷了時(shí)間、溝通、合作、失敗、成功以及許多關(guān)于生產(chǎn)力的會(huì)議(有時(shí)很尷尬,但它

    2023年04月20日
    瀏覽(26)
  • 構(gòu)建可觀測(cè)架構(gòu),從這5個(gè)方面著手

    隨著系統(tǒng)復(fù)雜度的提升,“可觀測(cè)性”(Observability)成為架構(gòu)建設(shè)的重要原則之一。那么構(gòu)建一個(gè)可觀測(cè)的系統(tǒng)架構(gòu)需要做哪些工作呢?本文將從以下5個(gè)方面介紹構(gòu)建可觀測(cè)架構(gòu)的主要考慮: 首先要確定核心業(yè)務(wù)指標(biāo),比如請(qǐng)求響應(yīng)時(shí)間、錯(cuò)誤率、吞吐量等。這些指標(biāo)直接關(guān)聯(lián)到用

    2024年02月14日
    瀏覽(24)
  • mysql優(yōu)化一般從這幾個(gè)方面出發(fā)

    MySQL 優(yōu)化是針對(duì)數(shù)據(jù)庫(kù)性能和查詢效率的一系列操作和策略,旨在提高數(shù)據(jù)庫(kù)的響應(yīng)速度、降低資源消耗,并優(yōu)化查詢執(zhí)行計(jì)劃。以下是一些常見的 MySQL 優(yōu)化技巧: 1、 使用合適的數(shù)據(jù)類型:選擇合適的數(shù)據(jù)類型可以節(jié)省存儲(chǔ)空間和提高查詢效率。盡量使用更小的數(shù)據(jù)類型,

    2024年02月15日
    瀏覽(26)
  • 知識(shí)庫(kù)網(wǎng)站如何搭建?需要注意這五個(gè)要點(diǎn)!

    知識(shí)庫(kù)網(wǎng)站如何搭建?需要注意這五個(gè)要點(diǎn)!

    正因?yàn)橹R(shí)庫(kù)提供結(jié)構(gòu)化知識(shí)庫(kù)來記載信息和知識(shí),便于團(tuán)隊(duì)沉淀經(jīng)驗(yàn)、共享資源,形成完整的知識(shí)體系并持續(xù)進(jìn)化?,使得它成為當(dāng)前企業(yè)發(fā)展新寵。 構(gòu)建自己/團(tuán)隊(duì)的知識(shí)庫(kù)是一個(gè)良好的習(xí)慣,可以提高工作和學(xué)習(xí)效率,以下是一些高效構(gòu)建自己的知識(shí)庫(kù)的方法,希望能

    2024年02月09日
    瀏覽(31)
  • 想要檢測(cè)TikTok網(wǎng)絡(luò)是否安全?這五個(gè)網(wǎng)站請(qǐng)收好

    想要檢測(cè)TikTok網(wǎng)絡(luò)是否安全?這五個(gè)網(wǎng)站請(qǐng)收好

    Tiktok目前在海外大火,越來越多的人想要進(jìn)入TikTok的海外市場(chǎng)并撈一桶金。然而,成功并非易事。想要在TikTok中立足,我們必須保證我們的設(shè)備、網(wǎng)絡(luò)環(huán)境和網(wǎng)絡(luò)節(jié)點(diǎn)完全符合官方的要求,并且沒有任何異常或風(fēng)險(xiǎn)。那么我們?cè)撊绾卧O(shè)置、以及設(shè)置完成后如何檢測(cè)自己賬號(hào)的

    2024年02月02日
    瀏覽(25)
  • pdf轉(zhuǎn)jpg怎么解決?這五個(gè)轉(zhuǎn)換方法快速搞定!

    pdf轉(zhuǎn)jpg怎么解決?這五個(gè)轉(zhuǎn)換方法快速搞定!

    pdf轉(zhuǎn)jpg怎么轉(zhuǎn)?pdf是在我們工作中經(jīng)常使用的一種辦公文件格式類型,但是在某些特殊情況下,我們應(yīng)該把pdf轉(zhuǎn)jpg圖片格式文件,很多人在這種情況下不知道如何把pdf轉(zhuǎn)jpg圖片格式文件,接下來我們一起來了解下pdf轉(zhuǎn)jpg轉(zhuǎn)換方法有哪些? ?PDF轉(zhuǎn)圖片教程 PDF轉(zhuǎn)圖片方法一:使用

    2023年04月21日
    瀏覽(21)
  • 這五個(gè)問題一下就看出阿里通義千問和ChatGPT的差距了

    這五個(gè)問題一下就看出阿里通義千問和ChatGPT的差距了

    阿里通義千問申請(qǐng)過了,為了看看達(dá)到了什么水平,于是我問題了5個(gè)ChatGPT回答過的問題 1 ,這五個(gè)問題網(wǎng)上都是沒有的,是我自己想出來的。 這是一個(gè)有趣的問題,但是也有一些誤解。公雞蛋并不是公雞下的蛋,而是指公雞的睪丸,也就是公雞的生殖器官。所以小明說他吃

    2024年02月04日
    瀏覽(27)
  • MySQL優(yōu)化:12種提升SQL執(zhí)行效率的有效方法

    在數(shù)據(jù)庫(kù)管理和優(yōu)化的世界里,MySQL作為一個(gè)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其性能優(yōu)化是任何數(shù)據(jù)密集型應(yīng)用成功的關(guān)鍵。優(yōu)化MySQL數(shù)據(jù)庫(kù)不僅可以顯著提高SQL查詢的效率,還能確保數(shù)據(jù)的穩(wěn)定性和可靠性。 在本文中,我將介紹12種提升SQL執(zhí)行效率的有效方法,并通過實(shí)用的

    2024年01月16日
    瀏覽(972)
  • 怎么迅速做出高端、還會(huì)動(dòng)的數(shù)據(jù)圖表?來看看這五個(gè)大數(shù)據(jù)可視化神器!

    怎么迅速做出高端、還會(huì)動(dòng)的數(shù)據(jù)圖表?來看看這五個(gè)大數(shù)據(jù)可視化神器!

    其實(shí)很簡(jiǎn)單。大數(shù)據(jù)可視化就是指通過 圖表、圖形、地圖等視覺化方式 , 將龐大、復(fù)雜的大數(shù)據(jù)集合轉(zhuǎn)化為直觀、易于理解和分析的圖像展示。 它的目的是 幫助人們更好地理解和解釋大數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)中的模式、趨勢(shì)和關(guān)聯(lián),從而支持決策和洞察。 大數(shù)據(jù)可視化可以將抽

    2024年02月13日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包