国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

RobinQu / 1746人閱讀

摘要:的批評者聲稱性能低效執(zhí)行緩慢,但實際上并非如此嘗試以下個小技巧,可以加快應(yīng)用程序。使用或者機器語言擴展包來執(zhí)行關(guān)鍵任務(wù)能極大改善性能。但是如果你把求值的結(jié)果放入一個變量中,就能提高程序的性能。

Python是一門非常酷的語言,因為很少的Python代碼可以在短時間內(nèi)做很多事情,并且,Python很容易就能支持多任務(wù)和多重處理。

Python的批評者聲稱Python性能低效、執(zhí)行緩慢,但實際上并非如此:嘗試以下6個小技巧,可以加快Pytho應(yīng)用程序。

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

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

Cython
PyInlne
PyPy
Pyrex

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

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

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

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)],

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

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

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

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都會去求這個方法的值。但是如果你把求值的結(jié)果放入一個變量中,就能提高程序的性能。這個關(guān)鍵是減少Python內(nèi)執(zhí)行的循環(huán)次數(shù),因為Python解析這些實例是比較慢的。

4、使用新版本

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

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

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

5、嘗試多種編程方法

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

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)

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

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)建新的編程技巧都能讓你的程序獲得更快的運行速度。

6、交叉編譯程序

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

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

譯文鏈接:http://www.ido321.com/1433.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37499.html

相關(guān)文章

  • 利用 NGINX 最大化 Python 性能,第二部分:負載均衡和監(jiān)控

    摘要:現(xiàn)有的服務(wù)器和應(yīng)用程序服務(wù)器相結(jié)合并在一個冒泡中運行,無法直接接觸網(wǎng)絡(luò)流量,由反向代理服務(wù)器提出填鴨式請求。賦予高可用性讓你的反向代理服務(wù)器鏡像到在線備份,同時擁有備用的應(yīng)用程序服務(wù)器,讓你的站點高度可用。 【編者按】本文主要介紹 NGINX 的主要功能以及如何通過 Nginx 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 本文上一篇系: 利用...

    zhangrxiang 評論0 收藏0
  • 利用 NGINX 最大化 Python 性能,第二部分:負載均衡和監(jiān)控

    摘要:現(xiàn)有的服務(wù)器和應(yīng)用程序服務(wù)器相結(jié)合并在一個冒泡中運行,無法直接接觸網(wǎng)絡(luò)流量,由反向代理服務(wù)器提出填鴨式請求。賦予高可用性讓你的反向代理服務(wù)器鏡像到在線備份,同時擁有備用的應(yīng)用程序服務(wù)器,讓你的站點高度可用。 【編者按】本文主要介紹 NGINX 的主要功能以及如何通過 Nginx 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 本文上一篇系: 利用...

    Snailclimb 評論0 收藏0
  • 「碼蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...

    wangtdgoodluck 評論0 收藏0
  • 利用 NGINX 最大化 Python 性能,第一部分:Web 服務(wù)和緩存

    摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...

    1treeS 評論0 收藏0
  • 利用 NGINX 最大化 Python 性能,第一部分:Web 服務(wù)和緩存

    摘要:無論是將其用作的服務(wù)器反向代理服務(wù)器負載均衡器,還是同時使用以上三種功能,和都能帶來很大好處。再就是下篇文章會介紹如何把和當作反向代理服務(wù)器和多個應(yīng)用程序服務(wù)器的負載均衡器。而使用將會有助于解決這一問題。 【編者按】本文主要介紹 nginx 的主要功能以及如何通過 NGINX 優(yōu)化 Python 應(yīng)用性能。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。 Python 的著名之...

    v1 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<