90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來

Python 賽車 數據結構 人工智能與未明學院 2019-04-05
以下文章轉自 微信公眾號 菜鳥學python
90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來




很多人抱怨說自己寫的Python代碼跑的慢,尤其是當處理的數據集比較大的時候,其實稍微改動幾行代碼就可以讓你的代碼性能提高好幾倍,不信一起來看下面這個5個小技巧。

1.for 循環


我們大部分的時候代碼裡面都有for循環,然後裡面嵌套一段邏輯處理,下面有兩種方法來完成:


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來


二者的性能差距有多大呢,一般我們用內置的timeit模塊來量化比較:


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來


把傳統的for改成推導列表,高下立判,性能提高了很多,提升了200%


2.用set而不用list

我們再來看一個常見的場景,搜索性能的時候用set是列表10倍,不信看下面這個例子


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來


原因搜索成員的時候,Python的set比list快很多。差距就在if i in mylist 和if i in myset。列表的複雜度是O(n),而集和的複雜度是O(1),搜索起來肯定是set快!


3.交換if和for的位置

很多時候,我們是在for循環內部進行條件判斷,循環一個變量,然後用if/else進行判斷。對於這樣的情況,可以優化一下,把if/else提到for循環外邊,也可以提高性能。


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來



4.巧妙的用try/except語句

很多時候在一個for循環內部,對i進行計算,然後添加到一個list裡面,如果能巧妙地利用try/except,可以擺脫對if/else檢查的開銷,從而提高性能。


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來





5.神器collection模塊

collection庫提供了很多模塊,這些模塊非常有用,有一些模塊是跟容器有關,大部分的實戰項目我們都會用到。比如deque雙向隊列和defaultdict缺省字典。

1).雙向隊列deque


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來


deque是雙向隊列,如果你的業務邏輯裡面需要大量的從隊列的頭或者尾部刪除,添加,用deque的性能會大幅提高!如果只是小隊列,並且對元素需要隨機訪問操作,那麼list會快一些。

2).缺省字典defaultdict

對於字典的使用,我們要學會用defaultdict來代替,一來是因為有缺省值非常安全,如果訪問不存在的key,不會報錯;二來是Pyhon性能會大幅提高。


90%的人說Python程序慢,5大神招讓你的代碼像賽車一樣跑起來


僅僅換了字典數據結構,性能就大幅的提高了3倍。

Python裡面的技巧還是很多的,尤其是性能優化這塊,Py3已經比Py2性能上高了許多,如果我們在平時寫代碼的時候,能多一份思考,代碼不僅能work還能提升性能,相信你經常這樣思考,慢慢的就會成為高手啦!當然很多新手經常不得法,可以看看這個捷徑。

相關推薦

推薦中...