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

Python裝飾器原理與基本用法分析

 更新時間:2020年01月07日 09:11:40   作者:隨風行云  
這篇文章主要介紹了Python裝飾器原理與基本用法,結(jié)合實例形式分析了Python裝飾器的基本功能、原理、用法與操作注意事項,需要的朋友可以參考下

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

裝飾器:

意義:在不能改變原函數(shù)的源代碼,和在不改變整個項目中原函數(shù)的調(diào)用方式的情況下,給函數(shù)添加新的功能

由于不允許改變函數(shù)的源代碼,在忽略調(diào)用方式的情況下,我們可能會有以下結(jié)果:

def decorator(func):
  func()
  print("logging")
def test1():
  print("test1")
def test2():
  print("Test2")
decorator(test1)
decorator(test2)

但這改變了原本的調(diào)用方式,原本是test1(),現(xiàn)在是decorator(test1)

那么如果我們?yōu)榱耸拐{(diào)用方式不變,是否可以使裝飾好的函數(shù)decorator的返回值是一個我們需要的函數(shù),再賦值給原來的函數(shù)名呢?

于是:

def timmer1(func):
  def warpper():
    start_time = time.time()
    func()
    stop_time=time.time()
    print("the func run time is %s"%(stop_time-start_time))
   return warpper
test3=timmer1(test3)

好像上面這段代碼并沒有改變原來的調(diào)用方式,調(diào)用原來的test3,相當于運行timmer1中的warpper

如果對于無參數(shù)的函數(shù)來說,上面的代碼已經(jīng)實現(xiàn)了我們的目的,但對于帶參數(shù)的函數(shù),上面的代碼沒有傳入?yún)?shù),所以仍然需要修改

于是:

def timmer2(func):
  def warpper(*args,**kwargs):
    start_time = time.time()
    func(*args,**kwargs)
    stop_time=time.time()
    print("the func run time is %s"%(stop_time-start_time))
  return warpper

在上上面的代碼中,由于實質(zhì)上,test3已經(jīng)等于wrapper,所以可以直接使用,test3(參數(shù))來傳入?yún)?shù),為了處理參數(shù)不確定數(shù)量問題,可以使用可變長度參數(shù)

上面代碼還存在一個問題,無法獲取原本函數(shù)中的返回值,那么我們還需要加上一些東西:

import time
def timmer2(func):
  def warpper(*args,**kwargs):
    start_time = time.time()
    res=func(*args,**kwargs)
    return res
    stop_time=time.time()
    print("the func run time is %s"%(stop_time-start_time))
  return warpper

使用一個變量記錄下原函數(shù)的返回值。

這樣我們就實現(xiàn)了裝飾器的基本功能。

補充:

python提供了一個功能:

@裝飾器名
def 目標裝飾函數(shù)名():
  pass
#上面的效果是 目標裝飾函數(shù)名=裝飾器(目標裝飾函數(shù)名)

所以在需要替換原函數(shù)的時候,可以在目標裝飾函數(shù)定義的上一行加上@裝飾器名

所以上面的代碼會變成:

def timmer2(func):
  def warpper(*args,**kwargs):
    start_time = time.time()
    func(*args,**kwargs)
    stop_time=time.time()
    print("the func run time is %s"%(stop_time-start_time))
  return warpper
@timmer2
def test7():
  print("test7")
@timmer2
def test6(x):
  print(x)
test7()
test6(2)

import time
def timmer2(func):
  def warpper(*args,**kwargs):
    start_time = time.time()
    res=func(*args,**kwargs)
    return res
    stop_time=time.time()
    print("the func run time is %s"%(stop_time-start_time))
  return warpper
@timmer2
def test4():
  print("test4 run")
  return "test4 done"
test4()
print("--------")
print(test4())

第二個補充:

可以一個函數(shù),可以使用多個裝飾器

比如:

@裝飾器1

@裝飾器2

更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O計入門與進階教程》、《Python數(shù)據(jù)結(jié)構與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進階經(jīng)典教程

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

相關文章

  • 基于python的Paxos算法實現(xiàn)

    基于python的Paxos算法實現(xiàn)

    這篇文章主要介紹了基于python的Paxos算法實現(xiàn),理解一個算法最快,最深刻的做法,我覺著可能是自己手動實現(xiàn),雖然項目中不用自己實現(xiàn),有已經(jīng)封裝好的算法庫,供我們調(diào)用,我覺著還是有必要自己親自實踐一下,需要的朋友可以參考下
    2019-07-07
  • pytorch如何定義新的自動求導函數(shù)

    pytorch如何定義新的自動求導函數(shù)

    這篇文章主要介紹了pytorch如何定義新的自動求導函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
    2022-12-12
  • python opencv實現(xiàn)gif圖片分解的示例代碼

    python opencv實現(xiàn)gif圖片分解的示例代碼

    這篇文章主要介紹了python opencv實現(xiàn)gif圖片分解的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 使用Python可視化支持向量機SVM

    使用Python可視化支持向量機SVM

    支持向量機是用于分類和回歸任務的強大監(jiān)督學習模型,本文我們將探索使用Python和流行的庫(如scikit-learn和Matplotlib)可視化SVM,有需要的可以了解下
    2024-11-11
  • 剖析Django中模版標簽的解析與參數(shù)傳遞

    剖析Django中模版標簽的解析與參數(shù)傳遞

    這篇文章主要介紹了剖析Django中模版標簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • Python常用圖像形態(tài)學操作詳解

    Python常用圖像形態(tài)學操作詳解

    這篇文章主要為大家詳細介紹幾個Python中常用的圖像形態(tài)學操作:腐蝕、膨脹、開閉運算、梯度運算、禮帽和黑帽,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-08-08
  • django框架使用orm實現(xiàn)批量更新數(shù)據(jù)的方法

    django框架使用orm實現(xiàn)批量更新數(shù)據(jù)的方法

    這篇文章主要介紹了django框架使用orm實現(xiàn)批量更新數(shù)據(jù)的方法,結(jié)合實例形式簡單分析了Django基于orm操作數(shù)據(jù)庫更新數(shù)據(jù)的相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • Python django框架輸入漢字,數(shù)字,字符生成二維碼實現(xiàn)詳解

    Python django框架輸入漢字,數(shù)字,字符生成二維碼實現(xiàn)詳解

    這篇文章主要介紹了Python django框架輸入漢字,數(shù)字,字符轉(zhuǎn)成二維碼實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • python-圖片流傳輸?shù)乃悸芳笆纠?url轉(zhuǎn)換二維碼)

    python-圖片流傳輸?shù)乃悸芳笆纠?url轉(zhuǎn)換二維碼)

    這篇文章主要介紹了python-圖片流傳輸?shù)乃悸芳笆纠?url轉(zhuǎn)換二維碼),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python在屏幕上點擊特定按鈕或圖像效果實例

    python在屏幕上點擊特定按鈕或圖像效果實例

    這篇文章主要給大家介紹了關于python在屏幕上點擊特定按鈕或圖像效果的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友可以參考下
    2022-09-09

最新評論

宁都县| 鲜城| 萝北县| 莫力| 永定县| 休宁县| 古蔺县| 建阳市| 衡东县| 台东县| 昌平区| 和田市| 福贡县| 翼城县| 吉隆县| 河间市| 贵州省| 和顺县| 定结县| 漠河县| 德兴市| 鹤庆县| 姜堰市| 肇东市| 鲜城| 沿河| 西青区| 临洮县| 阿图什市| 瑞安市| 深水埗区| 武定县| 康定县| 天台县| 江津市| 民乐县| 德昌县| 芦溪县| 洮南市| 邹城市| 独山县|