用python也有小兩年了,不是開發,所以**應該沒那麼精湛。但是經常會寫測試指令碼和小工具。在積累了大量的庫以後,開始把重點放在提高python效率的方法,養成好的習慣。因為是剛剛開始關注,所以不斷補充吧,以便將來隨時檢視。
一.原則類
1.把range全部換成xrange
2.生成器,如 list=(item for item in fp)
3.利用psyco庫,提高函式和類的執行效率。
4.字串拼接:盡量少用「+」的方式,而採用''.join ,還有"%s"%i這樣賦值的手段
5.函式的開銷很大。盡量把迴圈放在函式內進行。而不要讓每次迭代都呼叫函式。
6.「前提工作」先做好,比如該賦值,該拼接的,然後再引入到函式中,或者進行下面的迴圈。
7.盡量使用內建方法,因為內建的是c寫的,效率肯定高很多
8.每當要對序列中的內容進行迴圈處理時,就應當嘗試用列表解析來代替它,如:[i for i in xrang(10) if i%2==0]
9.學會使用itertools模組。當python中新增了迭代器後,就為常見模式提供了乙個新的模組,因為它是以c語言編寫,所以提供了最高效的迭代器。
--多記錄一些。列表,字串,字典,xrange,類檔案物件,這些都是可迭代物件,換句話說,都可以直接用在for迴圈中進行迭代,如for item in open('1.txt')
--直接使用速度會快。另外,我對比了itertools裡工具和xrange,比如都迴圈100000次列印數字,使用islice(count(),100000)均要比xrange(100000)快
--而xrange還要比range快。
10.用列表解析取代for迴圈。列表解析的效率等於或高於map。
二.應用類
1.列表推導
如果想複製乙個列表或者字典,直接使用l1=list(l),d1 = dict(d).而不要使用列表推導。
如果想對列表的每乙個元素都呼叫函式,應該用l1=map(f,l),而不是l1=[f(x) for x in l]
當序列過長,每次只需要讀取乙個元素的時候,應該用生成器,而不是列表推導。total=sum(x+23 for x in lodlist if x >5)
2.從檔案中讀取指定的行
標準庫linecache非常適合這個任務:
import linecache
theline = linecache.getline(thefilepath,desired_line_number)
如果檔案很大,則應該使用顯示的迴圈,並封裝在乙個函式中:
defgetline(thefilepath,desired_line_number):
ifdesired_line_number
<1:
return
''for
current_line_number,line
inenumerate(open(thefilepath,'ru
')):
ifcurrent_line_number
==desired_line_number-1
:return
line
return
''3.何時用列表推導or生成器表示式
如果你希望使用整個列表,則使用列表推導,因為他會節省生成器帶來的系統開銷;
如果你只想用列表的一部分,那麼使用生成器吧。
4.隨機取出列表裡的元素
應該先用random.shuffle(list)把元素隨機的打亂,然後順序的取每一項即可。如果不想取到重複的,可以用list.pop(),既取出來了,又把這個元素從列表中刪除。而且內建的pop方法,非常快速。
我希望python高階。但在這之前,我還要修飾一下邊幅,上面所述的,就是在美化你的python程式。完成乙個功能時,盡可能簡潔,不羅嗦,每個細節提前考慮優化。指令碼耦合性太強也會影響效率。
不斷補充吧。
三.文字處理
文字處理,字串處理,應該是平時用的非常多的,這裡也有優化技巧。
1.習慣用filter或map
fp = open('1.txt','rb')
isregdbroot = lambda line:line.startswith('regdb root')
#orisregdbroot = lambda line:'start' in line
a = filter(isregdbroot,fp)
結果輸出所有符合項的列表集合。
Python 提高效率
最近師兄給了小任務,算乙個p值。任務詳情是這樣的 第一步,有基因集a,23個元素,基因集b,451個元素,共有23 451 9922個組合 當然你要考慮去重 看在ppi資料庫 145萬多行資料 中出現的組合總個數 觀察值 第二步,然後再以hg19中基因為背景基因集,放回隨機抽取23個基因構成基因集c...
如何提高效率
如果問 你想不想使自己的收入加倍 我猜每個人的答案都是 yes 如果我繼續問 你相不相信現在你的收入會加倍 我想有一些人可能會沒把握,有一些人認為不太可能,我告訴各位 你們每個人的收入一定會加 倍 因為按照每年物價增長率及通貨膨脹的正常速度,20年後你的收入一定會加倍。但是如果你希望,提前在5年內 ...
如何提高效率
在提高班學習有很長的一段時間了,學習的收穫中有一點是非常的明顯,那就是自己的效率明顯的比原來高出許多,現在就按照自己的切身體會來總結一下如何提高自己效率.1 目標 必須要有目標,沒有目標和方向效率會大大的折扣.當然不僅僅是學習,更是生活,事業,和人的整個一生.這點公尺老師非常的重視,每個學習階段都給...