九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Python學(xué)習(xí)筆記(十二):lambda表達(dá)式與函數(shù)式編程

以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ù)。

[python] view plain copy
  1. f = lambda x,y,z : x+y+z  
  2. print f(1,2,3)  
  3.   
  4. g = lambda x,y=2,z=3 : x+y+z  
  5. print g(1,z=4,y=5)  
輸出結(jié)果為:

[python] view plain copy
  1. 6  
  2. 10  

2,lambda表達(dá)式常用來編寫跳轉(zhuǎn)表(jump table),就是行為的列表或字典。例如:

[python] view plain copy
  1. L = [(lambda x: x**2),  
  2.     (lambda x: x**3),  
  3.     (lambda x: x**4)]  
  4. print L[0](2),L[1](2),L[2](2)  
  5.   
  6. D = {'f1':(lambda: 2+3),  
  7.     'f2':(lambda: 2*3),  
  8.     'f3':(lambda: 2**3)}  
  9. print D['f1'](),D['f2'](),D['f3']()  
輸出結(jié)果為:

[python] view plain copy
  1. 4 8 16  
  2. 5 6 8  

3,lambda表達(dá)式可以嵌套使用,但是從可讀性的角度來說,應(yīng)盡量避免使用嵌套的lambda表達(dá)式。

4,map函數(shù)可以在序列中映射函數(shù)進(jìn)行操作。例如:

[python] view plain copy
  1. def inc(x):  
  2.     return x+10  
  3.       
  4. L = [1,2,3,4]  
  5. print map(inc,L)  
  6.   
  7. print map((lambda x: x+10),L)  
輸出結(jié)果為:
[python] view plain copy
  1. [11, 12, 13, 14]  
  2. [11, 12, 13, 14]  

5,列表解析可以實(shí)現(xiàn)map函數(shù)同樣的功能,而且往往比map要快。例如:

[python] view plain copy
  1. print [x**2 for x in range(10)]  
  2. print map((lambda x: x**2), range(10))  
輸出結(jié)果為:

[python] view plain copy
  1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]  
  2. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]  

6,列表解析比map更強(qiáng)大。例如:

[python] view plain copy
  1. print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1]  
輸出結(jié)果為:

[python] view plain copy
  1. [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)。例如:

[python] view plain copy
  1. def gensquares(N):  
  2.     for i in range(N):  
  3.         yield i**2  
  4.           
  5.   
  6. for i in gensquares(5):  
  7.     print i,  
輸出結(jié)果為:

[python] view plain copy
  1. 0 1 4 9 16  

8,所有的迭代內(nèi)容(包括for循環(huán)、map調(diào)用、列表解析等等)將會(huì)自動(dòng)調(diào)用iter函數(shù),來看看是不是支持了迭代協(xié)議。

9,生成器表達(dá)式就像列表解析一樣,但它們是擴(kuò)在圓括號(hào)()中而不是方括號(hào)[]中。例如:

[python] view plain copy
  1. for num in (x**2 for x in range(5)):  
  2.     print num,  
輸出結(jié)果為:

[python] view plain copy
  1. 0 1 4 9 16  

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ù)的例子:

[python] view plain copy
  1. def saver(x=[]):  
  2.     x.append(1)  
  3.     print x  
  4.       
  5. saver([2])  
  6. saver()  
  7. saver()  
  8. saver()  
輸出結(jié)果為:

[python] view plain copy
  1. [2, 1]  
  2. [1]  
  3. [1, 1]  
  4. [1, 1, 1]  




本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python:eval的妙用和濫用
我的Python學(xué)習(xí)之路十四:函數(shù)(三)
理解lambda表達(dá)式,為什么用它?
Python中read和write用法
Python語(yǔ)法基礎(chǔ)
python 一個(gè).py文件如何調(diào)用另一個(gè).py文件中的類和函數(shù)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服