漫畫 | 假裝自己是Python高手,學(xué)會這十招就可以
Python是一門簡單易學(xué),而且功能非常強大的語言,目前是火的一大糊涂,據(jù)說除了生孩子啥都干。但是Python有一個很致命的問題就是慢,看下面兩個人都吵起來:
01.招數(shù)一
在列表里面計數(shù)
性能:第二種計數(shù)方法比第一種快6290倍,為啥因為Python原生的內(nèi)置函數(shù)都是優(yōu)化過的,所以能用原生的計算的時候,盡量用原生的函數(shù)來計算。
02.招數(shù)二
過濾一個列表
性能:第二種方法比第一種慢近50%,有人可能覺得filter應(yīng)該會快一些,其實filter增加了復(fù)雜度,返回一個迭代對象再用list轉(zhuǎn)化為一個列表,所以開銷大一些。其實最快是推導(dǎo)列表,比第一種性能提高近30%。
03.招數(shù)三
善用異常,事半功倍
性能:第二種比第一種快了近3倍,簡單粗暴直接用異常,而第一種會通過內(nèi)置函數(shù)hasattr來先檢查,查找內(nèi)部類的屬性,增加了開銷。
04.招數(shù)四
列表成員檢查
性能:第二種比第一種快了1倍,直接用in這樣的方法檢查列表內(nèi)部成員比遍列要快很多的。當(dāng)然如果你的num是在列表的頭部,搜索會更快!
05.招數(shù)五
去重
性能:第二種比第一種快了近400倍,所以能用原生的內(nèi)置的數(shù)據(jù)結(jié)構(gòu),一定要用原生的。不過相信大部分同學(xué)去重都開始用set了。
06.招數(shù)六
列表的排序
性能:第二種比第一種快了近6倍,sorted函數(shù)會把原來的列表進行排序然后再返回一個新的列表,而sort函數(shù)直接再原來的列表上面排序,節(jié)省了開銷。
07.招數(shù)七
把迭代循環(huán)放到函數(shù)里面
性能:第二種要比第一種快了20%多,原因是因為把重復(fù)的循環(huán)直接放到了一次性的塞入函數(shù),要把你調(diào)用1000次函數(shù)開銷小很多。
08.招數(shù)八
檢查是否為True
性能:最快的是第三種(直接用if)比第一種快了60%,不需要用借助==和is來進行判斷。因為==會調(diào)用內(nèi)置的魔法函數(shù)__eq__來比較左右兩邊的類型,而直接用if來判斷var是否為空,None,空的列表,字典會快很多。
09.招數(shù)九
檢查列表是否為空
性能:第三種最快,第三種比第一種快了3倍;其實大部人新手都喜歡用len來判斷,其實我也是,這個習(xí)慣要改。
10.最后一招
性能:沒有對比沒有傷害,因為Python一切皆對象,所以當(dāng)你用list()生成一個對象的時候會產(chǎn)生開銷,而[]直接返回一個list,會快很多,同理dict也是一樣的。
大家可以反思一下自己的代碼里面有沒有上面這幾招的代碼,回去優(yōu)化一下,會對你的性能有很大的提高?;蛘卟锁B也可以直接背下來,面試的時候也許可以假裝一把高手。