以Mark Lutz著的《Python學(xué)習(xí)手冊(cè)》為教程,每天花1個(gè)小時(shí)左右時(shí)間學(xué)習(xí),爭(zhēng)取兩周完成。 --- 寫在前面的話
2013-7-22 21:00 學(xué)習(xí)筆記
1,lambda的一般形式是關(guān)鍵字lambda后面跟一個(gè)或多個(gè)參數(shù),緊跟一個(gè)冒號(hào),以后是一個(gè)表達(dá)式。lambda是一個(gè)表達(dá)式而不是一個(gè)語(yǔ)句。它能夠出現(xiàn)在Python語(yǔ)法不允許def出現(xiàn)的地方。作為表達(dá)式,lambda返回一個(gè)值(即一個(gè)新的函數(shù))。lambda用來編寫簡(jiǎn)單的函數(shù),而def用來處理更強(qiáng)大的任務(wù)。
- f = lambda x,y,z : x+y+z
- print f(1,2,3)
-
- g = lambda x,y=2,z=3 : x+y+z
- print g(1,z=4,y=5)
輸出結(jié)果為:
2,lambda表達(dá)式常用來編寫跳轉(zhuǎn)表(jump table),就是行為的列表或字典。例如:
- L = [(lambda x: x**2),
- (lambda x: x**3),
- (lambda x: x**4)]
- print L[0](2),L[1](2),L[2](2)
-
- D = {'f1':(lambda: 2+3),
- 'f2':(lambda: 2*3),
- 'f3':(lambda: 2**3)}
- print D['f1'](),D['f2'](),D['f3']()
輸出結(jié)果為:
3,lambda表達(dá)式可以嵌套使用,但是從可讀性的角度來說,應(yīng)盡量避免使用嵌套的lambda表達(dá)式。
4,map函數(shù)可以在序列中映射函數(shù)進(jìn)行操作。例如:
- def inc(x):
- return x+10
-
- L = [1,2,3,4]
- print map(inc,L)
-
- print map((lambda x: x+10),L)
輸出結(jié)果為:
- [11, 12, 13, 14]
- [11, 12, 13, 14]
5,列表解析可以實(shí)現(xiàn)map函數(shù)同樣的功能,而且往往比map要快。例如:
- print [x**2 for x in range(10)]
- print map((lambda x: x**2), range(10))
輸出結(jié)果為:
- [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6,列表解析比map更強(qiáng)大。例如:
- print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1]
輸出結(jié)果為:
- [1, 3, 5, 7, 9, 3, 5, 7, 9, 11, 5, 7, 9, 11, 13]
7,生成器函數(shù)就像一般的函數(shù),但它們被用作實(shí)現(xiàn)迭代協(xié)議,因此生成器函數(shù)只能在迭代語(yǔ)境中出現(xiàn)。例如:
- def gensquares(N):
- for i in range(N):
- yield i**2
-
-
- for i in gensquares(5):
- print i,
輸出結(jié)果為:
8,所有的迭代內(nèi)容(包括for循環(huán)、map調(diào)用、列表解析等等)將會(huì)自動(dòng)調(diào)用iter函數(shù),來看看是不是支持了迭代協(xié)議。
9,生成器表達(dá)式就像列表解析一樣,但它們是擴(kuò)在圓括號(hào)()中而不是方括號(hào)[]中。例如:
- for num in (x**2 for x in range(5)):
- print num,
輸出結(jié)果為:
10,列表解析比f(wàn)or循環(huán)具有更好的性能。盡管如此,在編寫Python代碼時(shí),性能不應(yīng)該是最優(yōu)先考慮的。
11,沒有return語(yǔ)句時(shí),函數(shù)將返回None對(duì)象。
12,函數(shù)設(shè)計(jì)的概念:
- 耦合性:只有在真正必要的情況下才使用全局變量
- 耦合性:不要改變可變類型的參數(shù),除非調(diào)用者希望這樣做
- 耦合性:避免直接改變另一個(gè)文件模塊中的變量
- 聚合性:每一個(gè)函數(shù)都應(yīng)有一個(gè)單一的、統(tǒng)一的目標(biāo)
13,最后給個(gè)默認(rèn)參數(shù)和可變參數(shù)的例子:
- def saver(x=[]):
- x.append(1)
- print x
-
- saver([2])
- saver()
- saver()
- saver()
輸出結(jié)果為:
- [2, 1]
- [1]
- [1, 1]
- [1, 1, 1]
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。