運(yùn)行結(jié)果如下:
閉包的定義:在函數(shù)內(nèi)部再定義一個(gè)函數(shù),并且這個(gè)函數(shù)用到了外邊函數(shù)的變量找默,那么將這個(gè)函數(shù)以及用到的一些變量稱之為閉包
1.閉包似優(yōu)化了變量杏慰,原來需要類對象完成的工作掉缺,閉包也可以完成
2.由于閉包引用了外部函數(shù)的局部變量,則外部函數(shù)的局部變量沒有及時(shí)釋放麦备,消耗內(nèi)存
裝飾器的定義:裝飾器孽椰,功能就是在運(yùn)行原來功能基礎(chǔ)上,加上一些其它功能凛篙,比如權(quán)限的驗(yàn)證黍匾,比如日志的記錄等等。不修改原來的代碼呛梆,進(jìn)行功能的擴(kuò)展锐涯。
比如java中的動(dòng)態(tài)代理,python的注解裝飾器
其實(shí)python的裝飾器填物,是修改了代碼
例子一:
@w1?內(nèi)部會(huì)執(zhí)行以下操作:
執(zhí)行w1函數(shù) 纹腌,并將 @w1 下面的函數(shù)名作為w1函數(shù)的參數(shù),即:@w1 等價(jià)于 w1(f1) 所以滞磺,內(nèi)部就會(huì)去執(zhí)行升薯。 ??
w1的返回值;將執(zhí)行完的w1函數(shù)返回值 賦值 給@w1下面的函數(shù)的函數(shù)名f1 即 將w1的返回值再重新賦值給 f1? 击困,即 ?f1()=inner()
先將f1賦值給參數(shù)涎劈,inner賦值給f1广凸,這樣f1( )調(diào)用的就是inner( ),inner的返回值就是func蛛枚,func( )調(diào)用的就是外部的這個(gè)函數(shù)谅海。