如果您想知道效率,有幾種工具可以用來檢查哪個解決方案/演算法更有效。這稱為分析。在
分析的第乙個目的是測試乙個有代表性的系統,以確定什麼是慢的(或者使用太多的ram,或者導致過多的磁碟i/o或網路i/o)。在
分析通常會增加開銷(10倍到100倍的減速可能是典型的),而且您仍然希望您的**盡可能像在現實世界中那樣使用。提取乙個測試用例並隔離需要測試的系統部分。最好,它已經被編寫成自己的模組集了。在
基本技術包括ipython中的%timeit魔術、time.time(),和timing decorator(見下面的示例)。您可以使用這些技術來理解語句和函式的行為。在
然後你有cprofile,這將給你乙個高層次的問題檢視,這樣你就可以把注意力集中到關鍵的功能上。在
接下來,看看line_profiler,,它將逐行分析您選擇的函式。結果將包括每行被呼叫的次數以及每行所花費時間的百分比。這正是你所需要的資訊,你需要了解什麼執行緩慢,為什麼。在
perf stat幫助您了解最終在cpu上執行的指令數以及cpu快取的利用效率。這允許矩陣操作的高階調整。在
heapy可以跟蹤python記憶體中的所有物件。這對於查詢奇怪的記憶體洩漏非常有用。如果您使用的是長時間執行的系統,
那麼dowser將引起您的興趣:它允許您通過web瀏覽器介面在長時間執行的流程中對活動物件進行內省。在
為了幫助您理解為什麼ram使用率很高,請檢視memory_profiler.這對於跟蹤一段時間內ram的使用情況特別有用,因此您可以向同事(或您自己)解釋為什麼某些函式使用的ram超過預期。在
示例:定義乙個decorator以自動化計時測量from functools import wraps
def timefn(fn):
@wraps(fn)
def measure_time(*args, **kwargs):
t1 = time.time()
result = fn(*args, **kwargs)
t2 = time.time()
print ("@timefn:" + fn.func_name + " took " + str(t2 - t1) + " seconds")
return result
return measure_time
@timefn
def your_func(var1, var2):
python 使用列舉類
當我們需要定義常量時,乙個辦法是用大寫變數通過整數來定義,例如月份 jan 1 feb 2 mar 3 nov 11 dec 12好處是簡單,缺點是型別是int,並且仍然是變數。更好的方法是為這樣的列舉型別定義乙個class型別,然後,每個常量都是class的乙個唯一例項。python提供了enum...
Python 列舉變數的使用
專案中需要大量用到列舉變數,但我們希望可以根據指定的字串,建立對應的列舉變數,並將列舉值作為儲存值 場景 客戶端傳送的訊息包帶有 android 字串,用以說明當前移動端系統型別,伺服器端需要為其建立對應的列舉變數,最終將列舉值 0或1 存入資料庫中 定義乙個抽象的列舉類作為父類 class bas...
python列舉型別 python基礎 列舉類
python 列舉類 示例 2016 8 30 18 55 25 mengmengcoding coding utf 8 from enum importenum enum是乙個列舉類 month,weekday各為乙個enum類的例項化 month enum month jan feb mar a...