# 本次講述的知識(shí)點(diǎn)也是非常重要的(嚴(yán)肅臉)
# 先有的閉包朴译,之后才生成了裝飾器坏快,同樣的也是非常簡(jiǎn)單的東西。
# 閉包
結(jié)構(gòu)組成;
寫(xiě)法粱玲;外層函數(shù)返回內(nèi)層函數(shù)的引用躬柬,外層函數(shù)必須要有參數(shù)!
作用抽减;執(zhí)行函數(shù)的時(shí)候我們可以把外層函數(shù)的參數(shù)保存在內(nèi)存中!
# 具體是如何演化成裝飾器的呢允青?
我記得當(dāng)初學(xué)習(xí)裝飾器的時(shí)候,樣哥講裝飾器就是表面意思卵沉,等于就是在一個(gè)事物上添加附加條件的過(guò)程颠锉,所以裝飾器在工作上運(yùn)用的蠻多的,簡(jiǎn)單易用J泛埂(有點(diǎn)廢話~~)
現(xiàn)在我們說(shuō)說(shuō)裝飾器的演變過(guò)程琼掠;
1. 我們先定義一個(gè)閉包,外層函數(shù)set_fun()與內(nèi)層函數(shù)call_fun()停撞,外層函數(shù)傳入?yún)?shù)func瓷蛙,內(nèi)層函數(shù)調(diào)用func(),另外在閉包外創(chuàng)建text()函數(shù)戈毒,打印text艰猬。這個(gè)時(shí)候我們已經(jīng)差不多寫(xiě)完了整個(gè)程序了,就剩下最后的執(zhí)行步驟埋市,我們可以先想一個(gè)問(wèn)題冠桃,裝飾器是來(lái)添加附加?xùn)|西的,所以我們可以簡(jiǎn)單的在閉包里的內(nèi)層函數(shù)添加一些東西道宅,這里我們就打印“權(quán)限”來(lái)代表添加的東西(畢竟裝飾器的初衷就是如此)食听,接下來(lái)我們來(lái)使兩者聯(lián)系并且執(zhí)行起來(lái);
call_fun = set_fun(test)
call_fun()?
這樣污茵,整個(gè)程序就都聯(lián)系起來(lái)了碳蛋,運(yùn)行后會(huì)發(fā)現(xiàn)在輸出的text之上加了一個(gè)權(quán)限兩字,對(duì)省咨!就是我們剛剛添加的肃弟!棒棒噠!附圖零蓉;
#話說(shuō)笤受,其實(shí)這個(gè)時(shí)候我們已經(jīng)完成了裝飾器的功能,等等敌蜂!這還是裝飾器的最初形態(tài)箩兽,我們還可以將其變得更簡(jiǎn)潔,更好~~~往下翻~
2. ?演變第二部章喉,我們只需把執(zhí)行代碼行的call_fun 改成 text~~~~嗯汗贫?改變不大身坐?對(duì),是的落包,改變不大部蛇,別慌,我們還有演變最終版呢咐蝇!這個(gè)過(guò)渡很重要的涯鲁;?
# 功能還是那個(gè)功能,結(jié)果還是那個(gè)結(jié)果有序!這其中其實(shí)是有一個(gè)指向問(wèn)題抹腿,1中的text指向是call_fun ,而現(xiàn)在這一層指向是經(jīng)過(guò)call_fun后又指向了func旭寿,這個(gè)時(shí)候text()=func()警绩,雙層指向更能直觀的顯示我們的所需要的目的!最終版要來(lái)咯~~~
#終版
# 這最終版就叼了盅称,簡(jiǎn)直瑟瑟發(fā)抖~~~哈哈肩祥,不皮了~~
#這其中要運(yùn)用到一個(gè)叫做語(yǔ)法糖的東西,顧名思義就是粘住你(這里是函數(shù))微渠,在函數(shù)前添加 @+閉包外層函數(shù)名,就形成了我們最終版的裝飾器咧擂;
#語(yǔ)法糖的出現(xiàn)就減去了一行調(diào)用代碼逞盆,代碼優(yōu)化還是很明顯的!之后再執(zhí)行函數(shù)就行了松申,完全不用管裝飾器云芦,已經(jīng)自動(dòng)執(zhí)行了。就如圖所示贸桶,在函數(shù)前加入語(yǔ)法糖就行(@set_fun==》text = set_fun(text) ?)
# 到這里舅逸,我們就明白了裝飾器的功能的同時(shí),又理解了其中的調(diào)用過(guò)程皇筛,沒(méi)有什么技術(shù)性的東西琉历,全都是一些固定的用法,所以我們就可以做一個(gè)萬(wàn)能裝飾器水醋,完全不用我們?nèi)ノ覀兙帉?xiě)裝飾器那種旗笔,嘿嘿;
#一般來(lái)說(shuō)拄踪,裝飾器涉及了很多種情況蝇恶;
# 裝飾我們的函數(shù)分為四組情況
#? 1. 無(wú)參,無(wú)返回
#? 2. 無(wú)參,有返回
#? 3. 有參,無(wú)返回
#? 4. 有參,有返回
而且,在道德上我們是不會(huì)更改函數(shù)的值和調(diào)用方式的惶桐,以上四種情況我在這就不說(shuō)明了撮弧,別人應(yīng)該寫(xiě)的比我更好潘懊,本次只是簡(jiǎn)述了閉包和裝飾器的生成過(guò)程!
# 總結(jié)贿衍;
生命有限授舟,重在珍惜!時(shí)間更是越用越少舌厨,學(xué)習(xí)成為生命有意義的體現(xiàn)岂却,更多的是滿足自己的精神世界,每天分享的東西不多裙椭,但只要一直學(xué)習(xí)躏哩,便不會(huì)孤獨(dú)!