溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python裝飾器的作用有什么

發(fā)布時(shí)間:2020-09-21 14:28:29 來源:億速云 閱讀:159 作者:Leah 欄目:編程語言

本篇文章為大家展示了python裝飾器的作用有什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

簡言之,python裝飾器就是用于拓展原來函數(shù)功能的一種函數(shù),這個(gè)函數(shù)的特殊之處在于它的返回值也是一個(gè)函數(shù),使用python裝飾器的好處就是在不用更改原函數(shù)的代碼前提下給函數(shù)增加新的功能。

一般而言,我們要想拓展原來函數(shù)代碼,最直接的辦法就是侵入代碼里面修改,例如:

import time
def func():
    print("hello")
    time.sleep(1)
    print("world")

這是我們最原始的的一個(gè)函數(shù),然后我們試圖記錄下這個(gè)函數(shù)執(zhí)行的總時(shí)間,那最簡單的做法就是:

#原始侵入,篡改原函數(shù)
import time
def func():
    startTime = time.time()
    
    print("hello")
    time.sleep(1)
    print("world")
    endTime = time.time()
    
    msecs = (endTime - startTime)*1000
    print("time is %d ms" %msecs)

但是如果你的Boss在公司里面和你說:“小祁,這段代碼是我們公司的核心代碼,你不能直接去改我們的核心代碼?!蹦窃撛趺崔k呢,我們仿照裝飾器先自己試著寫一下:

#避免直接侵入原函數(shù)修改,但是生效需要再次執(zhí)行函數(shù)
import time

def deco(func):
    startTime = time.time()
    func()
    endTime = time.time()
    msecs = (endTime - startTime)*1000
    print("time is %d ms" %msecs)


def func():
    print("hello")
    time.sleep(1)
    print("world")

if __name__ == '__main__':
    f = func
    deco(f)#只有把func()或者f()作為參數(shù)執(zhí)行,新加入功能才會(huì)生效
    print("f.__name__ is",f.__name__)#f的name就是func

這里我們定義了一個(gè)函數(shù)deco,它的參數(shù)是一個(gè)函數(shù),然后給這個(gè)函數(shù)嵌入了計(jì)時(shí)功能。然后你可以拍著胸脯對老板說,看吧,不用動(dòng)你原來的代碼,照樣拓展了它的函數(shù)功能。

上述內(nèi)容就是python裝飾器的作用有什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI