python箴言_Python高效率编程的8条箴言
一團(tuán)網(wǎng)資訊
一團(tuán)資訊 > python > Python高效率編程的8條箴言
Python高效率編程的8條箴言
2018-05-19 10:37:54 ??? 發(fā)布者:來源網(wǎng)絡(luò)
Python作為一門動(dòng)態(tài)語言,提供了很多語法糖,有助于我們以很短的代碼實(shí)現(xiàn)復(fù)雜的功能。另一方面,Python的歷史悠久,積累了大量高效易用的庫,基本上常見的任務(wù)都有對(duì)應(yīng)的工具庫。善用Python的語言特性,我們可以寫出Pythonic的代碼,下面探討一下如何寫出高效率的Python代碼
1.使用lambda表達(dá)式
lambda:這是Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù),類似與C語言中的宏,這些叫做lambda的函數(shù),是從LISP借用來的,可以用在任何需要函數(shù)的地方:
>>> g = lambda x: x * 2
>>> g(3)
6
>>> (lambda x: x * 2)(3) 6
2.使用filter過濾list和dict
(function, sequence):對(duì)sequence中的item依次執(zhí)行function(item),將執(zhí)行結(jié)果為True的item組成一個(gè)List/String/Tuple(取決于sequence的類型)返回: >>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
>>> def f(x): return x != 'a'
>>> filter(f, abcdef)
'bcdef'
3. 強(qiáng)大的map reduce函數(shù)
map(function, sequence) :對(duì)sequence中的item依次執(zhí)行function(item),見執(zhí)行結(jié)果組成一個(gè)List返回:
>>> def cube(x): return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> def cube(x) : return x + x
...
>>> map(cube , abcde)
['aa', 'bb', 'cc', 'dd', 'ee']
另外map也支持多個(gè)sequence,這就要求function也支持相應(yīng)數(shù)量的參數(shù)輸入:
>>> def add(x, y): return x+y
>>> map(add, range(8), range(8))
[0, 2, 4, 6, 8, 10, 12, 14]
reduce(function, sequence, starting_value):對(duì)sequence中的item順序迭代調(diào)用function,如果有starting_value,還可以作為初始值調(diào)用,例如可以用來對(duì)List求和:
>>> def add(x,y): return x + y
>>> reduce(add, range(1, 11))
55 (注:1+2+3+4+5+6+7+8+9+10)
4. 變量交換不需要使用臨時(shí)變量
>>>a=1 >>>b=2 >>>a, b = b, a
5. 靈活使用生成器yield,讓代碼更簡(jiǎn)潔,優(yōu)雅
生成器提供了一個(gè)更方便的產(chǎn)生迭代器的方式 代碼更為簡(jiǎn)潔,優(yōu)雅 充分利用了延遲評(píng)估的特性,僅在需要時(shí)才產(chǎn)生相應(yīng)的元素,而不是一次產(chǎn)生所有元素,節(jié)省了內(nèi)存,提高了效率 使得協(xié)同程序更加容易實(shí)現(xiàn),協(xié)同程序是有多個(gè)近入點(diǎn),可以恢復(fù)掛起的函數(shù)。實(shí)際上,python的協(xié)程相關(guān)的庫例如greenlet等就是基于yield實(shí)現(xiàn)的。 使用yield寫的斐波那契函數(shù),簡(jiǎn)潔吧
>>> def fib(n):
... a = b = 1
... for i in range(n):
... yield a
... a,b = b, a+b
...
>>> c = fib(10)
>>> c.next()
1
>>> c.next()
1
>>> c.next()
2
>>> c.next()
3
>>> c.next()
5
6. 靈活使用list,set, deque, array優(yōu)化性能
7.靈活使用sort,sorted進(jìn)行排序 sort只能對(duì)列表進(jìn)行排序,不會(huì)改變?cè)瓉淼牧斜?sorted可以對(duì)任何迭代器進(jìn)行排序,例如字典dict,元組,多維list等
>>> from operator import itemgetter
>>> gameresult = [['jim',96,'A'],['Eddy',99,'A'],['Cindy',87,'B'], ['Lucy', 76, 'C']]
>>> sorted(gameresult, key=itemgetter(2,1))
[['jim', 96, 'A'], ['Eddy', 99, 'A'], ['Cindy', 87, 'B'], ['Lucy', 76, 'C']]
8. 使用python標(biāo)準(zhǔn)庫,這塊內(nèi)容太多,不展開了 常見的庫有requests, jsonlib, pandas,argparse等
[ 責(zé)任編輯:來源網(wǎng)絡(luò) ]
總結(jié)
以上是生活随笔為你收集整理的python箴言_Python高效率编程的8条箴言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot 3.0最低版本要求
- 下一篇: Chrome、Edge 合力围剿,Saf