91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

兴国县| 吉安县| 永春县| 鄂州市| 博湖县| 仁怀市| 镇平县| 安庆市| 花莲市| 沂源县| 安泽县| 大冶市| 石屏县| 万全县| 景德镇市| 海原县| 论坛| 建瓯市| 民县| 会同县| 建水县| 江口县| 昌平区| 霍山县| 永吉县| 西乌珠穆沁旗| 怀化市| 萨嘎县| 金川县| 湖口县| 杭锦后旗| 靖西县| 榕江县| 桑植县| 鞍山市| 射洪县| 明光市| 晋宁县| 沾化县| 黄平县| 疏勒县|