提升Python運(yùn)行效率的小竅門

說起Python,作為一門大熱的編程語言,它簡單易學(xué)、語法優(yōu)美,自身擁有豐富強(qiáng)大的庫,而且應(yīng)用范圍也是十分廣泛。毫無疑問,Python 確實(shí)有用很多的優(yōu)點(diǎn),每一個(gè)優(yōu)點(diǎn)看起來都非常吸引人。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、橫縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

但是,Python 并不是沒有缺點(diǎn)的,最主要的缺點(diǎn)之一就是Python 的執(zhí)行速度不夠快。針對這個(gè)問題,下面為大家搜集了6個(gè)可以提高Python運(yùn)行效率的小竅門。


竅門一:關(guān)鍵代碼使用外部功能包

Python簡化了許多編程任務(wù),但是對于一些時(shí)間敏感的任務(wù),它的表現(xiàn)經(jīng)常不盡人意。使用C/C++或機(jī)器語言的外部功能包處理時(shí)間敏感任務(wù),可以有效提高應(yīng)用的運(yùn)行效率。

這些功能包往往依附于特定的平臺(tái),因此你要根據(jù)自己所用的平臺(tái)選擇合適的功能包。簡而言之,這個(gè)竅門要你犧牲應(yīng)用的可移植性以換取只有通過對底層主機(jī)的直接編程才能獲得的運(yùn)行效率。

以下是一些你可以選擇用來提升效率的功能包:

  • Cython

  • Pylnlne

  • PyPy

  • Pyrex

這些功能包的用處各有不同。比如說,使用C語言的數(shù)據(jù)類型,可以使涉及內(nèi)存操作的任務(wù)更高效或者更直觀。


Pyrex就能幫助Python延展出這樣的功能。Pylnline能使你在Python應(yīng)用中直接使用C代碼。內(nèi)聯(lián)代碼是獨(dú)立編譯的,但是它把所有編譯文件都保存在某處,并能充分利用C語言提供的高效率。


竅門二:在排序時(shí)使用鍵

Python含有許多古老的排序規(guī)則,這些規(guī)則在你創(chuàng)建定制的排序方法時(shí)會(huì)占用很多時(shí)間,而這些排序方法運(yùn)行時(shí)也會(huì)拖延程序?qū)嶋H的運(yùn)行速度。最佳的排序方法其實(shí)是盡可能多地使用鍵和內(nèi)置的sort()方法。譬如,拿下面的代碼來說:

  1. import operator

  2. somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

  3. somelist.sort(key=operator.itemgetter(0))

  4. somelist

  5. #Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]

  6. somelist.sort(key=operator.itemgetter(1))

  7. somelist

  8. #Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]

  9. somelist.sort(key=operator.itemgetter(2))

  10. somelist

  11. #Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],


在每段例子里,list都是根據(jù)你選擇的用作關(guān)鍵參數(shù)的索引進(jìn)行排序的。這個(gè)方法不僅對數(shù)值類型有效,還同樣適用于字符串類型。

竅門三:針對循環(huán)的優(yōu)化

每一種編程語言都強(qiáng)調(diào)最優(yōu)化的循環(huán)方案。當(dāng)使用Python時(shí),你可以借助豐富的技巧讓循環(huán)程序跑得更快。然而,開發(fā)者們經(jīng)常遺忘的一個(gè)技巧是:盡量避免在循環(huán)中訪問變量的屬性。譬如,拿下面的代碼來說:

  1. lowerlist=['this','is','lowercase']

  2. upper= str.upper

  3. upperlist=[]

  4. append= upperlist.append

  5. for wordin lowerlist:

  6.    append(upper(word))

  7.    print(upperlist)

  8.    #Output = ['THIS', 'IS', 'LOWERCASE']

每次調(diào)用str.upper, Python都會(huì)計(jì)算這個(gè)式子的值。然而,如果把這個(gè)求值賦值給一個(gè)變量,那么求值的結(jié)果就能提前知道,Python程序就能運(yùn)行得更快。

因此,關(guān)鍵就是盡可能減小Python在循環(huán)中的工作量。因?yàn)镻ython解釋執(zhí)行的特性,在上面的例子中會(huì)大大減慢它的速度。

(注意:優(yōu)化循環(huán)的方法還有很多,這只是其中之一。比如,很多程序員會(huì)認(rèn)為,列表推導(dǎo)式是提高循環(huán)速度的最佳方法。關(guān)鍵在于,優(yōu)化循環(huán)方案是提高應(yīng)用程序運(yùn)行速度的上佳選擇。)

竅門四:使用較新的Python版本

通常,每個(gè)版本的Python都會(huì)包含優(yōu)化內(nèi)容,使其運(yùn)行速度優(yōu)于之前的版本。但是,限制因素在于,你最喜歡的函數(shù)庫有沒有同步更新支持新的Python版本。與其爭論函數(shù)庫是否應(yīng)該更新,關(guān)鍵在于新的Python版本是否足夠高效來支持這一更新。

你要保證自己的代碼在新版本里還能運(yùn)行。你需要使用新的函數(shù)庫才能體驗(yàn)新的Python版本,然后你需要在做出關(guān)鍵性的改動(dòng)時(shí)檢查自己的應(yīng)用。只有當(dāng)你完成必要的修正之后,你才能體會(huì)新版本的不同。

然而,如果你只是確保自己的應(yīng)用在新版本中可以運(yùn)行,你很可能會(huì)錯(cuò)過新版本提供的新特性。一旦你決定更新,請分析你的應(yīng)用在新版本下的表現(xiàn),并檢查可能出問題的部分,然后優(yōu)先針對這些部分應(yīng)用新版本的特性。只有這樣,用戶才能在更新之初就覺察到應(yīng)用性能的改觀。

竅門五:嘗試多種編碼方法

每次創(chuàng)建應(yīng)用時(shí)都使用同一種編碼方法幾乎無一例外會(huì)導(dǎo)致應(yīng)用的運(yùn)行效率不盡人意。可以在程序分析時(shí)嘗試一些試驗(yàn)性的辦法。譬如說,在處理字典中的數(shù)據(jù)項(xiàng)時(shí),你既可以使用安全的方法,先確保數(shù)據(jù)項(xiàng)已經(jīng)存在再進(jìn)行更新,也可以直接對數(shù)據(jù)項(xiàng)進(jìn)行更新,把不存在的數(shù)據(jù)項(xiàng)作為特例分開處理。請看下面第一段代碼:

  1. n=16

  2. myDict={}

  3. for iin range(0, n):

  4.    char='abcd'[i%4]

  5.    if charnotin myDict:

  6.        myDict[char]=0

  7.        myDict[char]+=1

  8.        print(myDict)

當(dāng)一開始myDict為空時(shí),這段代碼會(huì)跑得比較快。然而,通常情況下,myDict填滿了數(shù)據(jù),至少填有大部分?jǐn)?shù)據(jù),這時(shí)換另一種方法會(huì)更有效率。

  1. n=16

  2. myDict={}

  3. for iin range(0, n):

  4.    char='abcd'[i%4]

  5.    try:

  6.        myDict[char]+=1

  7.    exceptKeyError:

  8.        myDict[char]=1

  9.    print(myDict)

在兩種方法中輸出結(jié)果都是一樣的。區(qū)別在于輸出是如何獲得的。跳出常規(guī)的思維模式,創(chuàng)建新的編程技巧能使你的應(yīng)用更有效率。

竅門六:交叉編譯你的應(yīng)用

開發(fā)者有時(shí)會(huì)忘記計(jì)算機(jī)其實(shí)并不理解用來創(chuàng)建現(xiàn)代應(yīng)用程序的編程語言。計(jì)算機(jī)理解的是機(jī)器語言。為了運(yùn)行你的應(yīng)用,你借助一個(gè)應(yīng)用將你所編的人類可讀的代碼轉(zhuǎn)換成機(jī)器可讀的代碼。有時(shí),你用一種諸如Python這樣的語言編寫應(yīng)用,再以C++這樣的語言運(yùn)行你的應(yīng)用,這在運(yùn)行的角度來說,是可行的。關(guān)鍵在于,你想你的應(yīng)用完成什么事情,而你的主機(jī)系統(tǒng)能提供什么樣的資源。

以上就是本文為大家展示的六個(gè)可以提升Python運(yùn)行效率的小竅門,嘗試這些竅門,需要結(jié)合自身的代碼情況,選擇出最適合的方式,才能更好地解決問題,畢竟版本以及平臺(tái)的差異還是有所影響的想知道更多Python小技巧嗎?敬請關(guān)注睿江云計(jì)算!

分享標(biāo)題:提升Python運(yùn)行效率的小竅門
網(wǎng)站URL:http://www.muchs.cn/article6/ijcjig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、定制開發(fā)、App開發(fā)、網(wǎng)站收錄、企業(yè)建站、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司