国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

盤點提高 Python 代碼效率的方法

2020-02-23 05:29:54
字體:
來源:轉載
供稿:網友

第一招:蛇打七寸:定位瓶頸

首先,第一步是定位瓶頸。舉個簡單的栗子,一個函數可以從1秒優化到到0.9秒,另一個函數可以從1分鐘優化到30秒,如果要花的代價相同,而且時間限制只能搞定一個,搞哪個?根據短板原理,當然選第二個啦。

一個有經驗的程序員在這里一定會遲疑一下,等等?函數?這么說,還要考慮調用次數?如果第一個函數在整個程序中需要被調用100000次,第二個函數在整個程序中被調用1次,這個就不一定了。舉這個栗子,是想說明,程序的瓶頸有的時候不一定一眼能看出來。還是上面那個選擇,程序員的你應該有感覺的,大多數情況下:一個「可以」從一分鐘優化到30秒的函數會比一個「可以」從1秒優化到0.9秒的函數更容易捕獲我們的注意,因為有很大的進步空間嘛。

所以,這么多廢話講完,獻上第一招,profile。這是 python 自帶的定位程序瓶頸的利器!雖然它提供了三種選項profile,cProfile,hotshot。還分為內置和外置。但是,個人覺得一種足矣,外置cProfile。心法如下:

python -m profile 逗比程序.py

這招的效果會輸出一系列東西,比如函數被調用了幾次,總時間多少,其中有多少是這個函數的子函數花費的,每次花多少時間,等等。嘛一圖勝千言:

filename:lineno(function): 文件名:第幾行(函數名)
ncalls: 這貨一共調用了幾次
tottime: 這貨自己總共花了多少時間,也就是要除掉內部函數小弟們的花費
percall: 平均每次調用花的時間,tottime 除以 ncalls
cumtime: 這貨還有它的所有內部函數小弟們的總花費
percall: 跟上面那個 percall 差不多,不過是 cumtime 除以 ncalls
找到最值得優化的點,然后干吧。

第二招:一蛇禪:只需一招

記得剛開始接觸 Python 的時候,有一位學長告訴我,Python 有一個牛逼的理想,它希望每一個用它的人能寫出一模一樣的程序。Python 之禪有云:

There should be one-- and preferably only one --obvious way to do it

所以 Python 系專業的禪師提供了一些常用功能的 only one 的寫法。本人看了一下傳說中的PythonWiKi:PerformanceTips,總結了幾個「不要醬紫」「要醬紫」。

合并字符串的時候不要醬紫:

s = "" for substring in list: s += substring

要醬紫:

s = "".join(slist)

格式化字符串的時候不要醬紫:

out = "<html>" + head + prologue + query + tail + "</html>"

要醬紫:

out = "<html>%s%s%s%s</html>" % (head, prologue, query, tail)

可以不用循環的時候就不要用循環,比如不要醬紫:

newlist = [] for word in oldlist: newlist.append(word.upper())            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日照市| 阜康市| 靖西县| 平昌县| 微博| 沙雅县| 文登市| 华坪县| 华阴市| 托克托县| 桃源县| 犍为县| 黄冈市| 井冈山市| 焦作市| 射洪县| 盖州市| 牟定县| 繁峙县| 安宁市| 江都市| 贺兰县| 南城县| 德令哈市| 专栏| 高邮市| 开原市| 双辽市| 乌拉特后旗| 怀远县| 南昌县| 启东市| 汤阴县| 沁水县| 梁山县| 锡林浩特市| 延寿县| 南川市| 高陵县| 吐鲁番市| 凌云县|