成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

這篇文章主要介紹了python中裝飾器是什么,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了耀州免費建站歡迎大家使用!

合理使用裝飾器可以簡化開發(fā),并且使得代碼更加清晰。下面我們分別介紹兩種裝飾器,不帶參數(shù)的裝飾器和帶參數(shù)的裝飾器。

一、不帶參數(shù)的裝飾器

我們用一個實際的例子來引入裝飾器的概念,比如我們現(xiàn)在有一個方法A(),然后我們需要在方法A()執(zhí)行之前在終端打印"function is running",這時候我們可以在方法A()的開始部分加上下面的代碼:

print("function is running")

但是如果我們不想修改方法A()的代碼,也可以重新寫一個方法decorator(),然后把A()作為入?yún)?,代碼如下:

def decorator(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs):
        print("Method is running")
        return fun()
    return wrapper

python中的方法可以作為參數(shù)傳入另一個方法,所以當(dāng)我們執(zhí)行decorator(A)的時候,返回的是一個方法,這個方法的本質(zhì)是先執(zhí)行print語句,然后再執(zhí)行A()。

但是這樣我們的調(diào)用代碼就需要進(jìn)行修改,也就是說之前調(diào)用方法A(),現(xiàn)在的寫法是調(diào)用decorator(A)(),為了不影響調(diào)用的代碼,我們使用python的語法糖改造方法A()的代碼。

@decorator
def A():
    # do something

實際上只是在A()的前面加上一行@decorator,這樣在我們的調(diào)用代碼就不需要改變了。

裝飾器中的@functools.wraps(fun)是為了保證返回的方法__name__屬性和入?yún)⒎椒╢un的__name__屬性相同。

二、帶入?yún)⒌难b飾器

在上面不帶參數(shù)的裝飾器中,我們實現(xiàn)了在執(zhí)行方法A()之前打印一行固定的字符串,如果我們想要打印不同的字符串就需要用帶參數(shù)的裝飾器。實際上就是在不帶參數(shù)的裝飾器上再封裝一層即可,代碼如下:

def decorator_par(name):
    def decorator(fun):
        @functools.wraps(fun)
        def wrapper(*args, **kwargs):
            print("Method {} is running".format(name))
            return fun()
        return wrapper
    return decorator

這樣我們就可以在使用裝飾器的時候設(shè)置參數(shù)name,實現(xiàn)打印不同的信息。完整的代碼如下:

import functools
 
def decorator_par(name):
    def decorator(fun):
        @functools.wraps(fun)
        def wrapper(*args, **kwargs):
            print("Method {} is running".format(name))
            return fun()
        return wrapper
    return decorator
 
@decorator_par("A")
def A():
    print("I am A")
 
@decorator_par("B")
def B():
    print("I am B")
 
A()
B()

執(zhí)行輸出為:

Method A is running
I am A
Method B is running
I am B

可以看到我們在不改變方法調(diào)用代碼的情況下,實現(xiàn)了在該方法之前打印特定的信息。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python中裝飾器是什么內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

分享題目:python中裝飾器是什么-創(chuàng)新互聯(lián)
URL標(biāo)題:http://jinyejixie.com/article8/depiop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、關(guān)鍵詞優(yōu)化標(biāo)簽優(yōu)化、建站公司、網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
庆安县| 临江市| 遂昌县| 广东省| 冕宁县| 遂溪县| 招远市| 古蔺县| 缙云县| 宝丰县| 林西县| 铜川市| 万载县| 高平市| 安宁市| 萝北县| 仁化县| 牡丹江市| 常州市| 黔南| 临湘市| 临湘市| 同德县| 勃利县| 洪江市| 迁安市| 梨树县| 大足县| 阳原县| 定南县| 新野县| 咸阳市| 兰州市| 鹤庆县| 威远县| 白玉县| 丹棱县| 慈利县| 翼城县| 仲巴县| 池州市|