真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

什么是Python中的裝飾器-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)是少有的網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、營(yíng)銷型企業(yè)網(wǎng)站、小程序開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、買鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年開(kāi)始,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)什么是Python中的裝飾器,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

什么是裝飾器

裝飾器是程序開(kāi)發(fā)中經(jīng)常會(huì)使到的一個(gè)功能,所以這也是Python面試中必問(wèn)的問(wèn)題。

定義:

裝飾器本身就是一個(gè)函數(shù),為其他函數(shù)提供附加功能,不改變被修飾函數(shù)的源代碼,不改變?cè){(diào)用方式,裝飾器=高階函數(shù)+嵌套函數(shù)。

知識(shí)點(diǎn):

函數(shù)本身就是一個(gè)變量(意味著可以被復(fù)制給一個(gè)變量:test=test(1) )。

高階函數(shù):把函數(shù)名當(dāng)成一個(gè)實(shí)參傳遞給另一個(gè)函數(shù)func(test1) (不改變?cè)创a的前提下添加代碼)。

返回值中包含函數(shù)名return deco (不改變函數(shù)的調(diào)用方式)。

嵌套函數(shù):函數(shù)中加入新的函數(shù)。

典型結(jié)構(gòu):

def func(args):
    def func_in(args_in):
         pass
     return func_in

三、裝飾器案例

1、先看一個(gè)例子

某公司有多個(gè)研發(fā)部門,1個(gè)基礎(chǔ)平臺(tái)部門,基礎(chǔ)平臺(tái)負(fù)責(zé)提供底層的功能,如:數(shù)據(jù)庫(kù)操作、redis調(diào)用、監(jiān)控API等功能。研發(fā)部行使基礎(chǔ)功能時(shí),只需調(diào)用基礎(chǔ)平臺(tái)提供的功能即可。如下:

--------------基礎(chǔ)平臺(tái)提供的功能--------------
def func1():
    pass
def func2():
    pass
def func3():
    pass
--------------研發(fā)部門A使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()
--------------研發(fā)部門B使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()

隨著項(xiàng)目進(jìn)度的深入,產(chǎn)品經(jīng)理提出,要在基礎(chǔ)平臺(tái)的提供的所有功能中,添加驗(yàn)證功能,不能誰(shuí)都可以使用基礎(chǔ)平臺(tái)的全部功能,即執(zhí)行功能前,先進(jìn)行驗(yàn)證。

項(xiàng)目經(jīng)理將此功能交給了小A去實(shí)現(xiàn)。

小A就去和每個(gè)研發(fā)部溝通,讓每個(gè)研發(fā)部自己把驗(yàn)證的代碼加上,結(jié)果第二天就被辭職了。

項(xiàng)目經(jīng)理又將此功能交給了小B去實(shí)現(xiàn)。

小B吸取小A的經(jīng)驗(yàn),開(kāi)始自己改代碼:

--------------基礎(chǔ)平臺(tái)提供的功能--------------
def func1():
    #驗(yàn)證1
    #驗(yàn)證2
    pass
def func2():
    #驗(yàn)證1
    #驗(yàn)證2
    pass
def func3():
    #驗(yàn)證1
    #驗(yàn)證2
    pass
--------------研發(fā)部門A使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()
--------------研發(fā)部門B使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()

沒(méi)過(guò)多久小B也被開(kāi)除了。。。

項(xiàng)目經(jīng)理又把工作交給了小C,小C對(duì)基礎(chǔ)平臺(tái)代碼進(jìn)行重構(gòu),其他業(yè)務(wù)部門無(wú)需做任何修改。

--------------基礎(chǔ)平臺(tái)提供的功能--------------
def check_login():
    #驗(yàn)證1
    #驗(yàn)證2
    pass
def func1():
    check_login()
    pass
def func2():
    check_login()
    pass
def func3():
    check_login()
    pass
--------------研發(fā)部門A使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()
--------------研發(fā)部門B使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()

項(xiàng)目經(jīng)理看后表示還不錯(cuò),但是感覺(jué)還是差了一點(diǎn)點(diǎn),于是決定不再低調(diào),再也不讓小弟做了,于是自己做了一個(gè)方案:

--------------基礎(chǔ)平臺(tái)提供的功能--------------
def check_login(func):
    def inner():
        #驗(yàn)證1
        #驗(yàn)證2
        func()
    return inner
@check_login
def func1():
    pass
@check_login
def func2():
    pass
@check_login
def func3():
    pass
--------------研發(fā)部門A使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()
--------------研發(fā)部門B使用基礎(chǔ)平臺(tái)--------------
func1()
func2()
func3()

對(duì)于上述代碼,也是僅僅對(duì)基礎(chǔ)平臺(tái)的代碼進(jìn)行修改, func1(), func2(), func3()之前都進(jìn)行【驗(yàn)證】操作,并且其他研發(fā)部也無(wú)需做任何操作。

單獨(dú)以func1()為例講解:

def check_login(func):
    def inner():
        #驗(yàn)證1
        #驗(yàn)證2
        func()
    return inner
@check_login
def func1():
    pass

python解釋器就會(huì)從上到下解釋代碼,步驟如下:

1 def check_login(func): ==>將check_login函數(shù)加載到內(nèi)存

2 @check_login

沒(méi)錯(cuò), 從表面上看解釋器僅僅會(huì)解釋這兩句代碼,因?yàn)楹瘮?shù)在沒(méi)有被調(diào)用之前其內(nèi)部代碼不會(huì)被執(zhí)行。從表面上看解釋器著實(shí)會(huì)執(zhí)行這兩句。

上例@check_login內(nèi)部會(huì)執(zhí)行以下操作:

執(zhí)行check_login函數(shù),并將@check_login下面的函數(shù)作為check_login函數(shù)的參數(shù),

即@check_login等價(jià)于check_login(func1),所以內(nèi)部就會(huì)去執(zhí)行:

def check_login(func):
    def inner():
        #驗(yàn)證1
        #驗(yàn)證2
        func() #func是參數(shù)。此時(shí)的func就是函數(shù)func1()
    #返回inner,inner的內(nèi)部就是執(zhí)行func1()函數(shù),但是執(zhí)行func1()函數(shù)前,進(jìn)行了驗(yàn)證1,驗(yàn)證2
    return inner

check_login() 的返回值

將執(zhí)行完的chenk_login函數(shù)返回值賦值 給@check_login下面的函數(shù)的函數(shù)名func1 即將check_login()的返回值再重新賦值給func1,即:

新func1 = def inner():
            #驗(yàn)證1
            #驗(yàn)證2
            func() #func是參數(shù)。此時(shí)的func就是函數(shù)func1()
            #返回inner,inner的內(nèi)部就是執(zhí)行func1()函數(shù),但是執(zhí)行func1()函數(shù)前,進(jìn)行了驗(yàn)證1,驗(yàn)證2
            return inner

所以,以后研發(fā)部門想要執(zhí)行func1函數(shù)時(shí),就會(huì)執(zhí)行新func1函數(shù),在新func1函數(shù)內(nèi)部先執(zhí)行驗(yàn)證,再執(zhí)行原來(lái)的func1函數(shù),然后將原來(lái)func1函數(shù)的返回值返回給了業(yè)務(wù)調(diào)用者。

上述就是小編為大家分享的什么是Python中的裝飾器了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


名稱欄目:什么是Python中的裝飾器-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/djdgph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部