1. <dd id="jcnig"><nav id="jcnig"><delect id="jcnig"></delect></nav></dd>
      <dfn id="jcnig"><tt id="jcnig"><sup id="jcnig"></sup></tt></dfn>

    2. <cite id="jcnig"></cite>
      <cite id="jcnig"><tt id="jcnig"></tt></cite>

      <address id="jcnig"><nav id="jcnig"></nav></address>
    3. <address id="jcnig"><nav id="jcnig"></nav></address>
      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 您更想做哪個方向的工作?

      獲取測試結果
       
      課程資料、活動優惠 領取通道
       
       
      日本一本二本三本av网站,一本加勒比HEZYO东京热高清,一本久久A久久精品综合