中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

嘉禾县| 莱州市| 广水市| 房产| 封丘县| 石狮市| 含山县| 盐亭县| 怀化市| 莱芜市| 肃宁县| 贵港市| 牡丹江市| 同心县| 长丰县| 新晃| 通州市| 衡阳县| 湟中县| 科技| 香河县| 宜都市| 甘洛县| 沽源县| 杭锦后旗| 德昌县| 元谋县| 遂川县| 郯城县| 伊春市| 丽水市| 大丰市| 汨罗市| 句容市| 延长县| 武宣县| 怀来县| 桂阳县| 绥江县| 金山区| 金堂县|