Python 裝飾器

裝飾器是方便開發(fā)根據(jù)產(chǎn)品經(jīng)理調(diào)整代碼的過程

只用語言描述很難理,下面直接看樣例代碼

1?? def outer(fun):

3? ?? ? def wrapper(age):#遇見函數(shù)先放在內(nèi)存

6? ? ? ? ? ? ? print ("a")

7? ? ? ? ? ? ? print ("b")

?????? ? ? ??? fun(age )

9? ? ? ? ? ? ? print ("最后")

4? ? ? return wrapper

2 @outer#相當回去執(zhí)行outer(),并且傳入的參數(shù)為foo,最終執(zhí)行的是outer(foo)

?def foo(age):

8? ? print ('a',age)

#在上面執(zhí)行完之后,相當于重新定義了一個foo函數(shù)

‘’‘

foo()=def wrapper(age): ? print ("a")?? print ("b") ? fun(age )?? print ("最后")#主要是wrapper的return

'''

5 foo("age")

這部分代碼的前面是我打上的程序運行順序,方便解釋和理解

首先,如果我們現(xiàn)在定義一個函數(shù)foo(),print是a,后面產(chǎn)品經(jīng)理 要求 在加一個print b,我們直接加上就行,但是如果我們不是一個函數(shù),而是成千上百個函數(shù),這樣如果我們在一個個加是不是會瞬間爆炸,裝飾器就是解決這個爆炸心情的關(guān)鍵

我們在foo主函數(shù)前面定義了一個outer函數(shù),這個函數(shù)就是裝飾器的關(guān)鍵,而且這個函數(shù)是函數(shù)套函數(shù),函數(shù)的執(zhí)行方式我們都懂的,但是怎么樣使outer函數(shù)與foo函數(shù)相連呢,這個時候就用到了@outer,這個是裝飾器與函數(shù)鏈接的關(guān)鍵,在這個地方@outer就等于outer(foo),通過這樣的方式,遇到產(chǎn)品經(jīng)理要求改的時候我們只要修改 outer里面的函數(shù)就行了,這就是裝飾器的方便之處

在執(zhí)行函數(shù)方面,def的函數(shù)是先存在內(nèi)存里面,調(diào)用的時候才會執(zhí)行,同時注意如果需要加參數(shù)時,參數(shù)添加的位置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容