6大技巧,讓Python程式設計健步如飛

2021-09-24 15:17:11 字數 1768 閱讀 8271

有人跟我抱怨說python太慢了,然後我就將python健步如飛的六大技巧傳授給他,結果讓他驚呆了,你也想知道這個秘訣嗎?這就告訴你:

python是一門優秀的語言,它能讓你在短時間內通過極少量**就能完成許多操作。不僅如此,它還輕鬆支援多工處理,比如多程序。

因為gil的存在,python很難充分利用多核cpu的優勢。但是,可以通過內建的模組multiprocessing實現下面幾種並行模式:

多程序並行程式設計

對於cpu密集型的程式,可以使用multiprocessing的process,pool等封裝好的類,通過多程序的方式實現平行計算。但是因為程序中的通訊成本比較大,對於程序之間需要大量資料互動的程式效率未必有大的提高。

多執行緒並行程式設計

對於io密集型的程式,multiprocessing.dummy模組使用multiprocessing的介面封裝threading,使得多執行緒程式設計也變得非常輕鬆(比如可以使用pool的map介面,簡潔高效)。分布式:multiprocessing中的managers類提供了可以在不同程序之共享資料的方式,可以在此基礎上開發出分布式的程式。 不同的業務場景可以選擇其中的一種或幾種的組合實現程式效能的優化。

優化演算法時間

法的時間複雜度對程式的執行效率影響最大,在python中可以通過選擇合適的資料結構來優化時間複雜度,如list和set查詢某乙個元素的時間複雜度分別是o(n)和o(1)。不同的場景有不同的優化方式,總得來說,一般有分治,分支界限,貪心,動態規劃等思想。

例如:set的用法

set的union,intersection,difference操作要比list的迭代要快。因此如果涉及到求list交集,並集或者差的問題可以轉換為set來操作。

針對迴圈的優化

每種程式語言都會強調需要優化迴圈。當使用python的時候,你可以依靠大量的技巧使得迴圈執行得更快。然而,開發者經常漏掉的乙個方法是:避免在乙個迴圈中使用點操作。例如,考慮下面的**:

每一次你呼叫方法str.upper,python都會求該方法的值。然而,如果你用乙個變數代替求得的值,值就變成了已知的,python就可以更快地執行任務。優化迴圈的關鍵,是要減少python在迴圈內部執行的工作量,因為python原生的直譯器在那種情況下,真的會減緩執行的速度。

函式選擇

在迴圈的時候使用xrange而不是range;使用xrange可以節省大量的系統記憶體,因為xrange()在序列中每次呼叫只產生乙個整數元素。而range()將直接返回完整的元素列表,用於迴圈時會有不必要的開銷。在python3中xrange不再存在,裡面range提供乙個可以遍歷任意長度的範圍的iterator。

使用效能分析工具

除了上面在ipython使用到的timeit模組,還有cprofile。cprofile的使用方式也非常簡單:python–m cprofile filename.py,filename.py是要執行程式的檔名,可以在標準輸出中看到每乙個函式被呼叫的次數和執行的時間,從而找到程式的效能瓶頸,然後可以有針對性地優化。

推薦閱讀:

學python的程式設計師,程式設計能力都「退化」成什麼樣了?

Python程式設計技巧

python 字典中使用了 hash table,因此查詢操作的複雜度為 o 1 而 list 實際是個陣列,在 list 中,查詢需要遍歷整個 list,其複雜度為 o n 因此對成員的查詢訪問等操作字典要比 list 更快。set 的 union,intersection,difference ...

python程式設計技巧

將乙個字串轉化成ascii碼並遍歷 for c in map ord,raw input 將乙個字串轉化成ascii碼並儲存到列表 l ord i ord a for i in input 字典,如果key存在則value 1否則建立 key,value 0 mp d sum mp d get d,...

英語閱讀太難?掌握6大技巧讓正確率達到90

參加過英語 精品課 考試的人應該都知道,在英語考試中,閱讀理解部分的分值佔整個試卷分值的很重,但又很容易丟分。150分題要想上100分,閱讀理解就一定不可以丟分太多。所以做閱讀速度的快慢 對文章內容理解掌握的程度,往往直接影響到英語考試的成績高低。但我的學生普遍給我反應,說現在英語考試的時間太緊張了...