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++代碼,結果是妳可以再本機模式下執行應用,而不是依賴於解釋器。根據平臺和任務中,妳可以看到顯著的性能提高。