亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python性能優化技巧

系統 1521 0

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

py

? 1、關鍵代碼可以依賴于擴展包

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

Cython
PyInlne
PyPy
Pyrex

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

? 2、使用關鍵字排序

有很多古老的Python代碼在執行時將花費額外的時間去創建一個自定義的排序函數。最好的排序方式是使用關鍵字和默認的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)],

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

? 3、優化循環

每一種編程語言都強調循環語句的優化,Python也是一樣的。盡管你可以依賴于豐富的技術讓循環運行的更快,然而,開發者經常忽略的一個方法是避免在循環內部使用點拼接字符串。對于下面的示例:

復制代碼 代碼如下:

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

每一次調用str.upper,Python都會去求這個方法的值。但是如果你把求值的結果放入一個變量中,就能提高程序的性能。這個關鍵是減少Python內執行的循環次數,因為Python解析這些實例是比較慢的。

? 4、使用新版本

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

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

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

? 5、嘗試多種編程方法

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

復制代碼 代碼如下:

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已經有數據填充時,就有更好的方法可以選擇:

復制代碼 代碼如下:

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},唯一的差異是輸出是怎么獲得的。站在盒子外考慮和創建新的編程技巧都能讓你的程序獲得更快的運行速度。

? 6、交叉編譯程序

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

??????? 一個有趣的交叉編譯器,Nuitka, 能將Python轉換成C++代碼,結果是你可以再本機模式下執行應用,而不是依賴于解釋器。根據平臺和任務中,你可以看到顯著的性能提高。

以上就是本文的全部內容了,希望對大家學習Python有所幫助。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人久久 | 伊人干综合网 | 91九色蝌蚪91pornv在线 | 久久精品是免费100 久久精品首页 | 欧美一区二区三区久久久 | 四虎影院最新地址 | 国产精品免费看久久久麻豆 | 日本不卡中文字幕 | 国产图片综合 | 午夜社区 | 欧美日韩福利视频一区二区三区 | 亚洲成a人v欧美综合天 | 日韩专区亚洲精品欧美专区 | 日本不卡免费高清一级视频 | 久久久久久综合一区中文字幕 | www.xxxx欧美| 久久在线一区 | 日韩网站在线 | 中文字幕亚洲精品日韩精品 | 国产爽片在线观看 | www性| 久久综合色婷婷 | 99热久久免费精品首页 | 狠狠色丁香婷婷综合视频 | 在线观看亚洲视频 | 日日干夜夜艹 | 亚洲国产精品不卡毛片a在线 | 伊人久久免费视频 | 狠狠操天天操夜夜操 | 97午夜影院 | 久久91精品牛牛 | 亚洲综合干 | 欧美一级成人一区二区三区 | 日韩城人网站 | 精品久久久中文字幕二区 | 在线视频自拍 | 国产综合在线观看 | 亚洲一区二区三区网站 | 亚洲免费播放 | 欧美成人二区 | 狠狠躁天天躁夜夜躁婷婷 |