python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器
函數(shù)式編程
一、閉包
一切皆對(duì)象意味著,所有類型均可被賦值,傳參~;函數(shù)可以當(dāng)做參數(shù)傳遞,也可以被當(dāng)做返回值返回;在其他一些語(yǔ)言中函數(shù)僅是一段代碼塊。
如何驗(yàn)證是閉包?
實(shí)現(xiàn)計(jì)步功能
使用閉包的環(huán)境變量而不借助全局變量,實(shí)現(xiàn)了良好的封裝性!!!
二、匿名函數(shù)/表達(dá)式
expression中經(jīng)常用到三元表達(dá)式,可以做判斷
一般語(yǔ)言中三元表達(dá)式: x > y ? x : y
python中格式: x if x > y else y
注意:lamba表達(dá)式經(jīng)常結(jié)合map、reduce、filter等函數(shù)使用
三、map函數(shù):映射
- 多變量下的map
四、reduce函數(shù):歸約
標(biāo)注中多了個(gè)x…
四、filter函數(shù)
filter返回的filter對(duì)象也需要借助內(nèi)置函數(shù)或者繼承來(lái)的函數(shù)list等來(lái)取值!!
五、裝飾器
用到的兩個(gè)思想
- 對(duì)于函數(shù)定義的復(fù)雜是可以接受的,但不能忍受函數(shù)調(diào)用的復(fù)雜
- 函數(shù)對(duì)于修改應(yīng)該是封閉的,對(duì)于擴(kuò)展應(yīng)是開(kāi)放的
裝飾器的定義
裝飾器demo
上述裝飾器僅是個(gè)demo,并不能在多種函數(shù)類型的情況下實(shí)現(xiàn)復(fù)用!因?yàn)閣rapper中參數(shù)限定死了:只有一個(gè)位置參數(shù)
注意:wrapper中參數(shù)名字可以不同于被包裝函數(shù)的參數(shù)名字,wrapper參數(shù)泛指一個(gè)位置形參!!
從上圖可知:裝飾器的幾大優(yōu)勢(shì):
+ 未改變已創(chuàng)建函數(shù)的定義
+ 未改變已創(chuàng)建函數(shù)的調(diào)用方式
+ 為已創(chuàng)建函數(shù)添加了新的模塊!!
面對(duì)多種類型函數(shù)情況下,裝飾器要有普適性才有意義:
可以記憶裝飾器內(nèi)參數(shù)的形參:可變位置參數(shù)+可變關(guān)鍵字參數(shù)=泛指所有類型的參數(shù)
總結(jié)
以上是生活随笔為你收集整理的python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python进阶:JSON与枚举
- 下一篇: python进阶:switch语句、推导