最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python裝飾器三種裝飾模式的簡單分析

 更新時間:2020年09月04日 10:32:12   作者:侯賽雷  
這篇文章主要介紹了python裝飾器的三種裝飾模式,幫助大家更好的理解和學(xué)習(xí)python 裝飾器,感興趣的朋友可以了解下

學(xué)設(shè)計模式中有個裝飾模式,用java實現(xiàn)起來不是很難,但是遠遠沒有python簡單,難怪越來越火了!

這里就簡單討論下python的幾種裝飾模式:

一 無參裝飾器:

# 裝飾器
import time
 
 
# 裝飾器,記錄函數(shù)運行時間
def decorator01(fun):
 def wapper():
  stime = time.time()
  fun()
  etime = time.time()
  print("fun run time is {TIME}".format(TIME=etime - stime))
 return wapper # 必須要返回一個函數(shù)的內(nèi)存地址
 
 
# 使用裝飾器裝飾某個函數(shù),等價于 test01=decorator01(test01),
# 即將test01實際引用變成wapper函數(shù)內(nèi)存地址,所以執(zhí)行test01實際是執(zhí)行wapper
@decorator01
def test01():
 time.sleep(2)
 print("test01 is running")
 
 
test01() # 不修改代碼和調(diào)用方式,實現(xiàn)添加記錄時間功能

二 函數(shù)帶參裝飾器:

# 裝飾器
import time
 
 
# 裝飾器,記錄函數(shù)運行時間
def decorator01(fun):
 def wapper(*args, **kwargs): # 使用非固定參數(shù),無論參數(shù)是什么,都可以傳遞進來
  stime = time.time()
  fun(*args, **kwargs)
  etime = time.time()
  print("fun run time is {TIME}".format(TIME=etime - stime))
 return wapper # 必須要返回一個函數(shù)的內(nèi)存地址
 
 
# test01() = wapper(), 所以裝飾器加參數(shù)是給嵌套函數(shù)加參數(shù)
@decorator01
def test01(args1):
 time.sleep(2)
 print("參數(shù)是 {NAME} ".format(NAME=args1))
 
 
test01("侯征") # 不修改代碼和調(diào)用方式,實現(xiàn)添加記錄時間功能

三 裝飾器本身帶參數(shù)的裝飾器:

# 裝飾器
import time
 
 
# 如果裝飾器有參數(shù),最外層是裝飾器的參數(shù)
def decorator01(*args, **kwargs):
 print("裝飾器參數(shù):", *args, **kwargs)
 def out(fun): #第二層才是接受的函數(shù)
  def wapper(*args, **kwargs): # 使用非固定參數(shù),無論參數(shù)是什么,都可以傳遞進來
   stime = time.time()
   fun(*args, **kwargs)
   etime = time.time()
   print("fun run time is {TIME}".format(TIME=etime - stime))
 
  return wapper # 必須要返回一個函數(shù)的內(nèi)存地址
 return out # 要返回裝飾函數(shù)的內(nèi)存地址
 
 
# 裝飾器本身帶參數(shù),此時 decorator01(arg)=out,即相當(dāng)于 @out裝飾test01,所以 test01=out(fun)=wapper
@decorator01(1)
def test01(args1):
 time.sleep(2)
 print("參數(shù)是 {NAME} ".format(NAME=args1))
 
 
test01("侯征") # 不修改代碼和調(diào)用方式,實現(xiàn)添加記錄時間功能

  這種一開始挺難理解的,但是只要記住一點,@語法糖裝飾器的作用就是 給被裝飾的函數(shù)重新賦一個函數(shù)的內(nèi)存地址,即裝飾器內(nèi)部定義的那個

和你直接fun01=decorator(fun),然后 fun01()是一樣的,只是這樣寫不用改變原來調(diào)用方式

@decorator

def fun():

即就是 fun=decorator(fun) 所以,當(dāng)裝飾器有參數(shù)時,還需要返回一個函數(shù),這個函數(shù)才是用來裝飾作用的, decorator(1)=out, 即 fun=out(fun) !!

所以外面再包一層就行了,其實就相當(dāng)于@decorator(1)=@out,即 decorator(1)=out ,實際裝飾器時out,只不過decorator(1)返回了一個out 這樣理解就簡單多了 ,無參的@就是起賦值作用

以上就是python裝飾器三種裝飾模式的簡單分析的詳細內(nèi)容,更多關(guān)于python 裝飾模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • kafka-python批量發(fā)送數(shù)據(jù)的實例

    kafka-python批量發(fā)送數(shù)據(jù)的實例

    今天小編就為大家分享一篇kafka-python批量發(fā)送數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python?存儲變量的幾種方法(推薦)

    python?存儲變量的幾種方法(推薦)

    這篇文章主要介紹了python?存儲變量的幾種方法,包括numpy?自帶方法,pandas?自帶方法,sklearn?的自帶方法和pickle?庫操作方法,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Python生成器實現(xiàn)簡單

    Python生成器實現(xiàn)簡單"生產(chǎn)者消費者"模型代碼實例

    這篇文章主要介紹了Python生成器實現(xiàn)簡單"生產(chǎn)者消費者"模型代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • python與json數(shù)據(jù)的交互詳情

    python與json數(shù)據(jù)的交互詳情

    這篇文章主要介紹了python與json數(shù)據(jù)的交互詳情,json是一種獨立于編程語言和平臺的輕量級數(shù)據(jù)交換方式,更多相關(guān)內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07
  • python學(xué)生信息管理系統(tǒng)

    python學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python學(xué)生信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python:按行讀入,排序然后輸出的方法

    python:按行讀入,排序然后輸出的方法

    今天小編就為大家分享一篇python:按行讀入,排序然后輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 基于virtualenv創(chuàng)建python虛擬環(huán)境過程圖解

    基于virtualenv創(chuàng)建python虛擬環(huán)境過程圖解

    這篇文章主要介紹了基于virtualenv創(chuàng)建python虛擬環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    JupyterNotebook 輸出窗口的顯示效果調(diào)整方法

    這篇文章主要介紹了JupyterNotebook 輸出窗口的顯示效果調(diào)整方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python基礎(chǔ)while循環(huán)及if判斷的實例講解

    python基礎(chǔ)while循環(huán)及if判斷的實例講解

    下面小編就為大家?guī)硪黄猵ython基礎(chǔ)while循環(huán)及if判斷的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯

    PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯

    這篇文章主要介紹了PyInstaller將Python文件打包為exe后如何反編譯(破解源碼)以及防止反編譯,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

兖州市| 广元市| 武鸣县| 沅江市| 西藏| 渭源县| 益阳市| 叙永县| 高阳县| 大名县| 彰化市| 新巴尔虎左旗| 黔西| 扬中市| 白沙| 东山县| 石楼县| 双城市| 崇信县| 肃北| 葫芦岛市| 泽库县| 汉沽区| 儋州市| 阳谷县| 望江县| 廊坊市| 信阳市| 饶河县| 梅州市| 石城县| 德昌县| 木里| 乌拉特中旗| 辽阳市| 精河县| 安化县| 安多县| 郓城县| 贵南县| 岳普湖县|