運行結果如下:
閉包的定義:在函數內部再定義一個函數,并且這個函數用到了外邊函數的變量,那么將這個函數以及用到的一些變量稱之為閉包
1.閉包似優化了變量,原來需要類對象完成的工作,閉包也可以完成
2.由于閉包引用了外部函數的局部變量,則外部函數的局部變量沒有及時釋放,消耗內存
裝飾器的定義:裝飾器,功能就是在運行原來功能基礎上,加上一些其它功能,比如權限的驗證,比如日志的記錄等等。不修改原來的代碼,進行功能的擴展。
比如java中的動態代理,python的注解裝飾器
其實python的裝飾器,是修改了代碼
例子一:
@w1?內部會執行以下操作:
執行w1函數 ,并將 @w1 下面的函數名作為w1函數的參數,即:@w1 等價于 w1(f1) 所以,內部就會去執行。 ??
w1的返回值;將執行完的w1函數返回值 賦值 給@w1下面的函數的函數名f1 即 將w1的返回值再重新賦值給 f1? ,即 ?f1()=inner()
先將f1賦值給參數,inner賦值給f1,這樣f1( )調用的就是inner( ),inner的返回值就是func,func( )調用的就是外部的這個函數。