提升 python 效率的一些細節方式

在列表裏面計數

性能:第二種計數方法比第一種快6290倍,爲啥由於Python原生的內置函數都是優化過的,因此能用原生的計算的時候,儘可能用原生的函數來計算。數據結構

過濾一個列表

 

性能:第二種方法比第一種慢近50%,有人可能以爲filter應該會快一些,其實filter增長了複雜度,返回一個迭代對象再用list轉化爲一個列表,因此開銷大一些。其實最快是推導列表,比第一種性能提升近30%。函數

異常處理

 

性能:第二種比第一種快了近3倍,簡單粗暴直接用異常,而第一種會經過內置函數hasattr來先檢查,查找內部類的屬性,增長了開銷。性能

列表成員檢查

 

性能:第二種比第一種快了1倍,直接用in這樣的方法檢查列表內部成員比遍列要快不少的。固然若是你的num是在列表的頭部,搜索會更快!優化

去重

 

性能:第二種比第一種快了近400倍,因此能用原生的內置的數據結構,必定要用原生的。不過相信大部分同窗去重都開始用set了。3d

列表的排序

 

性能:第二種比第一種快了近6倍,sorted函數會把原來的列表進行排序而後再返回一個新的列表,而sort函數直接再原來的列表上面排序,節省了開銷。對象

把迭代循環放到函數裏面

 

性能:第二種要比第一種快了20%多,緣由是由於把重複的循環直接放到了一次性的塞入函數,要把你調用1000次函數開銷小不少。blog

檢查是否爲True

 

性能:最快的是第三種(直接用if)比第一種快了60%,不須要用藉助==和is來進行判斷。由於==會調用內置的魔法函數__eq__來比較左右兩邊的類型,而直接用if來判斷var是否爲空,None,空的列表,字典會快不少。排序

檢查列表是否爲空

  

性能:第三種最快,第三種比第一種快了3倍;其實大部人新手都喜歡用len來判斷,其實我也是,這個習慣要改。容器

直接建立容器

 

性能:沒有對比沒有傷害,由於Python一切皆對象,因此當你用list()生成一個對象的時候會產生開銷,而[]直接返回一個list,會快不少,同理dict也是同樣的。搜索

相關文章
相關標籤/搜索