Python效能提升的一些技巧(持續更新)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

一般程式設計語言效能比較這個網站比較有說服力http://benchmarksgame.alioth.debian.org/u64q/ruby.html,現在的情況是python的速度在比較列表程式設計語言中屬於墊底的,但是這並不是說python不可取,pytthon慢到不能工作,通過一些簡單的最佳化和編碼規範python的速度還是不錯的,整天掛在嘴邊python效能不行的都是小白,你要做的系統需要百萬並發嗎?需要誤差在10毫秒內的即時交易嗎?需要千萬層級伺服器連接埠掃描嗎?需要DDOS層級的壓力測試嗎?需要幾個小時內一億次的弱密碼爆破嗎?如果你需要,一億層級爆破和生產環境中的10000QPS個人都用python+c擴充的方式實現過,我可以幫你。

其實絕大多是情境python都能很好的工作,一些對效能要求比較高的情境通過python+c擴充的形式都是可以搞定的,而且省時省力。

以前群裡總有個成員成天埋怨,python效能怎麼差,自己用起來怎麼費力,而不去尋找效能瓶頸在哪兒怎麼去做最佳化。要記住,自己菜逼,怪程式設計語言是沒有用的,這就像蹲坑拉屎,便秘拉不出來,說馬桶這個地方地球吸引力太小,聽說後來那位朋友去學scala了,還有人說他去學golang了,祝他早日找到自己心中的完美語言。

  1. python的編碼規範
  • 用產生器和列表推導式
  • 字串串連如果數量在3個或3個以內,直接用+號,超過3個,用format或者join,join最好,但format和join差別不是很大
  • 不要寫遞迴代碼,尾遞迴也不行,改成迴圈的形式
  • tuple能解決問題就不要用list,同樣set能解決問題就不要用dict,但是dict和list相比,dict速度飛快,就是記憶體佔用大。但是不要刻意去把list轉為tuple。
  • 函數能用局部變數,就不要用全域變數
  • 交換變數用pythonic的方式,a,b=b,a就這樣
  • map有時候可以代替迴圈,這個時候應該毫不猶豫的使用map
  • 在迴圈內部盡量減少不必要的非迴圈步驟
  • 用while 1別用while True
  • 多個變數值比較的時候可以用a<b<c,a<b<c比a<b and b<c效率更高
  • 計算x的y次冪用x**y,別用pow,難讀速度還慢
  • cpu密集計算別用python,即使要用,也要選擇numpy之類的庫,最好把cpu密集部分改成C代碼,然後ctypes調用,cpu密集部分也不推薦cython,總之C擴充>numpy=cython>python
    有些規範和語言無關,就是用C如果你的程式邏輯有問題,還是會慢。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.