亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Python自定義裝飾器原理與用法實例分析

發布時間:2020-08-28 21:29:29 來源:腳本之家 閱讀:149 作者:噴跑的豆子 欄目:開發技術

本文實例講述了Python自定義裝飾器原理與用法。分享給大家供大家參考,具體如下:

什么是裝飾器?裝飾器本質是一個函數,它可以在不改變原來的函數的基礎上額外的增加一些功能。如常見的@classmethod,@staticmethod等都是裝飾器,接下來記錄下如何自定義個裝飾器:

剛剛說過了,裝飾器的本質就是一個函數,所有想要自定義一個裝飾器,首先自定義一個函數

def decorate(func):
  def wrapper(*args,**kwargs):
    print("定義一個裝飾器")
    func(*args,**kwargs)
  return wrapper

此時就已經定義好了一個基本的裝飾器,那該如何調用呢?

@decorate
def text1():
  print("text1")
text1()

輸出的結果為:

定義一個裝飾器
text1

分析:此時的@decorate相當于將text1函數的內存地址傳入decorate函數,并返回wrapper函數的內存地址。因此在代碼結尾中調用text1()本質上是執行wrapper函數。因為執行的是wrapper函數,所以會打印”定義一個裝飾器”,又因為func函數是text1的內存地址,所以調用func,會打印”text1”。

帶參數的裝飾器

上面介紹了一個簡單的裝飾器如何定義,可是我們常常看到一個裝飾器@xxxxxxx(abc="python"),這種裝飾器是如何封裝的,原理又是怎么樣的呢

def decorate(name):
  def wrapper(func):
    def sub_wrapper(*args,**kwargs):
      print("定義一個帶參數的裝飾器",name)
      func(*args,**kwargs)
    return sub_wrapper  
  return wrapper
@decorate(name="python")
def text1():
  print("text1")
text1()

輸出結果:

定義一個帶參數的裝飾器 python
text1

分析:帶參數的裝飾器與普通的裝飾器多加了一層,其實就是講“python”參數傳入decorate函數,并返回wrapper函數的內存地址,再將text1函數內存地址傳入wrapper函數,并返回了sub_wrapper函數的內存地址。而在代碼末尾調用text1,其實本質是調用了sub_wrapper函數。

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python加密解密算法與技巧總結》、《Python編碼操作技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苗栗县| 绥阳县| 巢湖市| 靖州| 商城县| 花莲市| 昭平县| 广丰县| 广德县| 太湖县| 安乡县| 盘山县| 宁强县| 岳阳县| 错那县| 乌苏市| 彩票| 崇礼县| 凤台县| 桂东县| 五华县| 盐亭县| 永宁县| 历史| 共和县| 博客| 宣威市| 轮台县| 沐川县| 天门市| 秦皇岛市| 浪卡子县| 贞丰县| 寿光市| 綦江县| 民县| 宽城| 利津县| 东方市| 哈尔滨市| 英山县|