閉包:
在函數(shù)內(nèi)部在定義一個函數(shù),并且這個函數(shù)用到了外面函數(shù)的變量,這個函數(shù)和用到的變量,稱為閉包.
deftest_in(number_in):
print("in test_in函數(shù), number_in is %d"%number_in)
returnnumber+number_in
#其實這里返回的就是閉包的結(jié)果
returntest_in
#給test函數(shù)賦值钱贯,這個20就是給參數(shù)number
ret = test(20)
#注意這里的100其實給參數(shù)number_in
print(ret(100))
#注意這里的200其實給參數(shù)number_in
print(ret(200))
運行結(jié)果:
intest_in函數(shù), number_inis100
120
intest_in函數(shù), number_inis200
220
閉包思考:
1.閉包似優(yōu)化了變量,原來需要類對象完成的工作侦另,閉包也可以完成
2.由于閉包引用了外部函數(shù)的局部變量秩命,則外部函數(shù)的局部變量沒有及時釋放,消耗內(nèi)存
裝飾器:
裝飾器的功能就是在運行原來功能基礎(chǔ)上,加上一些其他功能,不修改原來的代碼進(jìn)行功能的擴(kuò)展.
功能:
引用日志
函數(shù)執(zhí)行時間統(tǒng)計
執(zhí)行函數(shù)前預(yù)備處理
執(zhí)行函數(shù)后清理功能
權(quán)限校驗
緩存