• <xmp id="wgksg"><samp id="wgksg"></samp>
  • <blockquote id="wgksg"></blockquote>
  • 400-650-7353

    精品課程

    您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】Python裝飾器函數概念

    【Python基礎知識】Python裝飾器函數概念

    • 發布: python培訓
    • 來源:
    • 2021-07-26 14:47:29
    • 閱讀()
    • 分享
    • 手機端入口

    裝飾器函數是在不改變原來函數的情況下,添加額外功能的函數。裝飾器函數內部還有一個函數,返回值是內部函數名。定義裝飾器函數的語法格式如下:

    def 裝飾器函數名(參數1):

    函數體

    def 內部函數名(參數2):

    函數體

    return 內部函數名

    其中,參數1接收原函數的函數名;參數2接收原函數的參數。

    例如,某月餅零售價為5元一個,但是禮盒裝月餅(8個裝)為200元一盒,那么同樣的月餅,使用禮盒包裝后,可能就加價160元。

    首先定義兩個函數,一個是月餅函數,另一個是禮盒函數。

    定義月餅函數,代碼如下:

    def cake():

    print('五仁月餅零售價5元')

    調用月餅函數,代碼如下:

    cake()

    調用月餅函數后,運行結果:

    五仁月餅零售價5元

    定義禮盒函數,代碼如下:

    def box():

    print('禮盒加價160元')

    def get_cake():

    cake()

    調用禮盒函數,代碼如下:

    box()

    調用禮盒函數后,運行結果:

    禮盒加價160元

    運行結果顯然不符合預期,沒有打印“五仁月餅零售價5元”,這是因為只是在禮盒函數內定義了get_cake()函數,但是沒有調用這個函數。修改禮盒函數,代碼如下:

    def box():

    print('禮盒加價160元')

    def get_cake():

    cake()

    get_cake() # 調用函數

    再次調用禮盒函數后,運行結果:

    禮盒加價160元

    五仁月餅零售價5元

    但是,同一種禮盒可能會裝不同的月餅,現有三種月餅分別為五仁、豆沙、蛋黃,這三種月餅的零售價分別為5元、5元、8元。

    定義豆沙月餅函數,代碼如下:

    def cake1():

    print('豆沙月餅零售價5元')

    定義蛋黃月餅函數,代碼如下:

    def cake2():

    print('蛋黃月餅零售價8元')

    【Python基礎知識】Python裝飾器函數概念

    下面分別給禮盒函數傳遞三個原函數的名稱,修改禮盒函數,代碼如下:

    def box(fun): # 添加參數

    print('禮盒加價160元')

    def get_cake():

    fun()

    get_cake()

    這樣就分別實現了三種打印效果,三種月餅都可以被禮盒包裝了。

    重新調用禮盒函數,代碼如下:

    box(cake)

    box(cake1)

    box(cake2)

    調用禮盒函數后,運行結果:

    禮盒加價160元

    五仁月餅零售價5元

    禮盒加價160元

    豆沙月餅零售價5元

    禮盒加價160元

    蛋黃月餅零售價8元

    目前月餅函數是無參數、無返回值的。給月餅函數添加返回值,代表月餅的個數,代碼如下:

    def cake():

    print('五仁月餅零售價5元')

    return 4 # 添加返回值

    而禮盒函數也需要進行相應的修改,代碼如下:

    def box(fun):

    print('禮盒加價160元')

    def get_cake():

    num = fun()

    return num

    return get_cake()

    調用禮盒函數,代碼如下:

    nums = box(cake)

    print('獲取數量:%d' % nums)

    調用禮盒函數后,運行結果:

    禮盒加價160元

    五仁月餅零售價5元

    獲取數量:4

    目前原函數是cake(),其裝飾器函數是box()。Python中,原函數和裝飾器函數的修飾關系類似于月餅和禮盒的關系。在定義原函數之前,使用“@+裝飾器函數名”的形式得到裝飾關系。

    給月餅函數添加修飾關系,代碼如下:

    @box

    def cake():

    print('五仁月餅零售價5元')

    return 4

    而禮盒函數也需要進行相應的修改,代碼如下:

    def box(fun):

    print('禮盒加價160元')

    def get_cake():

    num = fun()

    return num

    return get_cake # 返回值中刪除函數名后的括號

    在調用時不需要再寫禮盒函數名,就像最終吃的是月餅,因此,直接調用月餅函數即可,代碼如下:

    nums = cake()

    print('獲取數量:%d' % nums)

    調用月餅函數后,運行結果:

    禮盒加價160元

    五仁月餅零售價5元

    獲取數量:4

    由運行結果可知,此時不需要寫修飾器函數名,也可達到同樣的效果,這說明了裝飾器的作用。

    常見的函數一般是有參數的,裝飾器函數的參數用于接收原函數名,內部函數的參數用于接收原函數的參數。有時原函數中參數的數量和類型是無法事先確定的,可以使用*args和**kwargs,即可變位置參數和可變關鍵字參數,這樣無論任何參數都可以接收。

    修改月餅函數,添加參數n,代表月餅的個數,代碼如下:

    @box

    def cake(n): # 添加參數

    print('五仁月餅零售價5元')

    return n # 修改返回值

    而禮盒函數也需要進行相應的修改,代碼如下:

    def box(fun):

    print('禮盒加價160元')

    def get_cake(*args, **kwargs): # 內部函數添加參數

    num = fun(*args, **kwargs)

    return num

    return get_cake

    再次調用月餅函數,代碼如下:

    nums = cake(4)

    print('獲取數量:%d' % nums)

    再次調用月餅函數后,運行結果:

    禮盒加價160元

    五仁月餅零售價5元

    獲取數量:4

    學習疑問申請解答
    您的姓名
    您的電話
    意向課程
     

    中公優就業

    IT小助手

    掃描上方二維碼添加好友,請備注:599,享學習福利。

    >>本文地址:
    注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

    推薦閱讀

    優就業:ujiuye

    關注中公優就業官方微信

    • 關注微信回復關鍵詞“大禮包”,享學習福利
    QQ交流群
    在線疑問解答
    (加群備注“網站”)
    IT培訓交流群 加入群聊 +
    軟件測試 加入群聊 +
    全鏈路UI/UE設計 加入群聊 +
    Python+人工智能 加入群聊 +
    互聯網營銷 加入群聊 +
    Java開發 加入群聊 +
    PHP開發 加入群聊 +
    VR/AR游戲開發 加入群聊 +
    大前端 加入群聊 +
    大數據 加入群聊 +
    Linux云計算 加入群聊 +
    優就業官方微信
    掃碼回復關鍵詞“大禮包”
    享學習福利

    測一測
    你適合學哪門IT技術?

    1 您的年齡

    2 您的學歷

    3 您更想做哪個方向的工作?

    獲取測試結果
     
    課程資料、活動優惠 領取通道
     
     
    A级毛片毛片免费观看久,A毛看片免费观看视频,毛片曰本女人牲交视频视频