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

Python性能優(yōu)化技巧

 更新時(shí)間:2015年03月09日 14:41:34   投稿:hebedich  
Python的批評(píng)者聲稱Python性能低效、執(zhí)行緩慢,但實(shí)際上并非如此:嘗試以下6個(gè)小技巧,可以加快Pytho應(yīng)用程序。

Python是一門(mén)非??岬恼Z(yǔ)言,因?yàn)楹苌俚腜ython代碼可以在短時(shí)間內(nèi)做很多事情,并且,Python很容易就能支持多任務(wù)和多重處理。

py

  1、關(guān)鍵代碼可以依賴于擴(kuò)展包

Python使許多編程任務(wù)變得簡(jiǎn)單,但是對(duì)于很關(guān)鍵的任務(wù)并不總是提供最好的性能。使用C、C++或者機(jī)器語(yǔ)言擴(kuò)展包來(lái)執(zhí)行關(guān)鍵任務(wù)能極大改善性能。這些包是依賴于平臺(tái)的,也就是說(shuō),你必須使用特定的、與你使用的平臺(tái)相關(guān)的包。簡(jiǎn)而言之,該解決方案提供了一些應(yīng)用程序的可移植性,以換取性能,您可以獲得只有通過(guò)直接向底層主機(jī)編程。下面這些擴(kuò)展包你可以考慮添加到你的個(gè)人擴(kuò)展庫(kù)中:

Cython
PyInlne
PyPy
Pyrex

這些包有不同的作用和執(zhí)行方式。例如,Pyrex 讓Python處理一些內(nèi)存任務(wù)變得簡(jiǎn)單高效;PyInline可以直接讓你在Python應(yīng)用程序中使用C代碼,雖然內(nèi)聯(lián)代碼被單獨(dú)編譯,但是如果你能高效的利用C代碼,它可以在同一個(gè)地方處理每一件事情。

  2、使用關(guān)鍵字排序

有很多古老的Python代碼在執(zhí)行時(shí)將花費(fèi)額外的時(shí)間去創(chuàng)建一個(gè)自定義的排序函數(shù)。最好的排序方式是使用關(guān)鍵字和默認(rèn)的sort()方法,看看下面的示例:

復(fù)制代碼 代碼如下:

import operator
somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(0))
somelist
#Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(1))
somelist
#Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(2))
somelist
#Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],

每一個(gè)案例的列表是根據(jù)你選擇作為關(guān)鍵字參數(shù)的索引排序的,這種方式對(duì)字符串和數(shù)字排序同樣適用。

  3、優(yōu)化循環(huán)

每一種編程語(yǔ)言都強(qiáng)調(diào)循環(huán)語(yǔ)句的優(yōu)化,Python也是一樣的。盡管你可以依賴于豐富的技術(shù)讓循環(huán)運(yùn)行的更快,然而,開(kāi)發(fā)者經(jīng)常忽略的一個(gè)方法是避免在循環(huán)內(nèi)部使用點(diǎn)拼接字符串。對(duì)于下面的示例:

復(fù)制代碼 代碼如下:

lowerlist = ['this', 'is', 'lowercase']
upper = str.upper
upperlist = []
append = upperlist.append
for word in lowerlist:
    append(upper(word))
    print(upperlist)
    #Output = ['THIS', 'IS', 'LOWERCASE']

每一次調(diào)用str.upper,Python都會(huì)去求這個(gè)方法的值。但是如果你把求值的結(jié)果放入一個(gè)變量中,就能提高程序的性能。這個(gè)關(guān)鍵是減少Python內(nèi)執(zhí)行的循環(huán)次數(shù),因?yàn)镻ython解析這些實(shí)例是比較慢的。

  4、使用新版本

任何一個(gè)在線上搜索Python資料的人都會(huì)發(fā)現(xiàn)無(wú)數(shù)關(guān)于Python版本遷移的信息。通常,Python每一個(gè)版本都針對(duì)之前的一個(gè)版本做了優(yōu)化和改進(jìn),以讓Python運(yùn)行的更快。限制因素是你喜歡的函數(shù)庫(kù)是否也針對(duì)Python的新版本做了改進(jìn)。

當(dāng)你使用了新的函數(shù)庫(kù),獲得了Python的新版本,你需要保證代碼依然能夠運(yùn)行,檢查應(yīng)用,修正差異。

然后,如果你僅僅是保證應(yīng)用能夠在新版本上運(yùn)行,你可能錯(cuò)過(guò)新功能的更新。一旦你做了改進(jìn),在新版本下配置應(yīng)用程序,檢查問(wèn)題區(qū)域并優(yōu)先使用新功能更新,對(duì)于之前的升級(jí),用戶將看到更大性能的提升。

  5、嘗試多種編程方法

每一次你創(chuàng)建應(yīng)用的時(shí)候,都使用同一種編程方法,在某些情況下降導(dǎo)致程序運(yùn)行會(huì)比預(yù)期的慢。在分析的過(guò)程中做一些小試驗(yàn)。例如,當(dāng)管理字典中的數(shù)據(jù)項(xiàng)時(shí),可以采用安全的方法確定數(shù)據(jù)項(xiàng)是否已經(jīng)存在并需要更新它,或者你可以直接添加條目,然后處理項(xiàng)目根本不存在的情況。

復(fù)制代碼 代碼如下:

n = 16
myDict = {}
for i in range(0, n):
    char = 'abcd'[i%4]
    if char not in myDict:
        myDict[char] = 0
        myDict[char] += 1
        print(myDict)

當(dāng)myDict是空時(shí),上述的代碼通常會(huì)運(yùn)行的更快。但當(dāng)myDict已經(jīng)有數(shù)據(jù)填充時(shí),就有更好的方法可以選擇:

復(fù)制代碼 代碼如下:

n = 16
myDict = {}
for i in range(0, n):
    char = 'abcd'[i%4]
    try:
        myDict[char] += 1
    except KeyError:
        myDict[char] = 1
    print(myDict)

兩種情況下都輸出{'d': 4, 'c': 4, 'b': 4, 'a': 4},唯一的差異是輸出是怎么獲得的。站在盒子外考慮和創(chuàng)建新的編程技巧都能讓你的程序獲得更快的運(yùn)行速度。

  6、交叉編譯程序

        開(kāi)發(fā)者有時(shí)會(huì)忘記計(jì)算機(jī)不能識(shí)別任何一種現(xiàn)在應(yīng)用程序語(yǔ)言,它只識(shí)別機(jī)器代碼。為了運(yùn)行程序,需要一個(gè)應(yīng)用將人類可讀的代碼轉(zhuǎn)換成計(jì)算機(jī)能識(shí)別的代碼。當(dāng)用一種語(yǔ)言寫(xiě)程序時(shí),例如Python,然后用另外一種語(yǔ)言來(lái)運(yùn)行它,例如C++,從性能角度看是有道理的。這個(gè)取決于你想要用這個(gè)應(yīng)用做什么和主機(jī)系統(tǒng)能夠提供什么資源。

        一個(gè)有趣的交叉編譯器,Nuitka, 能將Python轉(zhuǎn)換成C++代碼,結(jié)果是你可以再本機(jī)模式下執(zhí)行應(yīng)用,而不是依賴于解釋器。根據(jù)平臺(tái)和任務(wù)中,你可以看到顯著的性能提高。

以上就是本文的全部?jī)?nèi)容了,希望對(duì)大家學(xué)習(xí)Python有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)生成bmp圖像的方法

    Python實(shí)現(xiàn)生成bmp圖像的方法

    本文主要介紹了Python實(shí)現(xiàn)生成bmp圖像的方法,對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例

    Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例

    今天小編就為大家分享一篇Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python Bamboolib庫(kù)加速Pandas數(shù)據(jù)分析過(guò)程詳解

    python Bamboolib庫(kù)加速Pandas數(shù)據(jù)分析過(guò)程詳解

    這篇文章主要介紹了python Bamboolib庫(kù)加速Pandas數(shù)據(jù)分析過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • scrapy爬蟲(chóng)實(shí)例分享

    scrapy爬蟲(chóng)實(shí)例分享

    這篇文章主要介紹了scrapy爬蟲(chóng)實(shí)例分享,分享了四則Python爬蟲(chóng)實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • python使用import引入其他目錄文件方式

    python使用import引入其他目錄文件方式

    這篇文章主要介紹了python使用import引入其他目錄文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合

    python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合

    今天小編就為大家分享一篇python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python實(shí)現(xiàn)圖片灰度化以及圖片顯示的兩種方法

    Python實(shí)現(xiàn)圖片灰度化以及圖片顯示的兩種方法

    這篇文章給大家介紹了Python實(shí)現(xiàn)圖片,灰度化以及圖片顯示的兩種方法并通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Python按行讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法

    Python按行讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Python按行讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Python操作Excel插入刪除行的方法

    Python操作Excel插入刪除行的方法

    今天小編就為大家分享一篇Python操作Excel插入刪除行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python如何把字典寫(xiě)入到CSV文件的方法示例

    Python如何把字典寫(xiě)入到CSV文件的方法示例

    這篇文章主要介紹了Python如何把字典寫(xiě)入到CSV文件的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

湟中县| 遂平县| 石河子市| 工布江达县| 麻栗坡县| 察雅县| 平度市| 榆中县| 宽甸| 湘潭市| 阿瓦提县| 宝山区| 吉林市| 张家界市| 体育| 津市市| 松溪县| 宝清县| 沧源| 栾川县| 高雄县| 兴和县| 遵化市| 黄陵县| 顺平县| 大名县| 榆社县| 合作市| 昂仁县| 淮阳县| 迁西县| 田东县| 忻城县| 二连浩特市| 无为县| 阿拉尔市| 读书| 蚌埠市| 黄平县| 桂东县| 全南县|