欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

裝飾器:

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

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

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

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

那么如果我們?yōu)榱耸拐{用方式不變,是否可以使裝飾好的函數(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)

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

如果對于無參數(shù)的函數(shù)來說,上面的代碼已經實現(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

在上上面的代碼中,由于實質上,test3已經等于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相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程

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

相關文章

  • python網絡爬蟲實現(xiàn)發(fā)送短信驗證碼的方法

    python網絡爬蟲實現(xiàn)發(fā)送短信驗證碼的方法

    這篇文章主要介紹了python網絡爬蟲實現(xiàn)發(fā)送短信驗證碼的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 舉例講解Python中metaclass元類的創(chuàng)建與使用

    舉例講解Python中metaclass元類的創(chuàng)建與使用

    在Python中我們用type函數(shù)可以動態(tài)地創(chuàng)建一個元類,同樣也可以用__metaclass__屬性來指定一個元類,接下來我們就來具體舉例講解Python中metaclass元類的創(chuàng)建與使用
    2016-06-06
  • Pycharm遠程連接服務器并運行與調試

    Pycharm遠程連接服務器并運行與調試

    本篇文章介紹一下 Pycharm 如何配置遠程連接信息,使其能夠在本地使用服務器上的GPU等硬件資源,并在本地完成代碼的運行與調試,感興趣的可以了解一下
    2021-08-08
  • python IDLE添加行號顯示教程

    python IDLE添加行號顯示教程

    這篇文章主要介紹了python IDLE添加行號顯示教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 如何使用Python實現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉換

    如何使用Python實現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉換

    這篇文章主要介紹了用Python實現(xiàn)數(shù)據(jù)透視表、音頻文件格式轉換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • Python生成隨機密碼的方法

    Python生成隨機密碼的方法

    這篇文章主要為大家詳細介紹了Python生成隨機密碼的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 基于python實現(xiàn)從尾到頭打印鏈表

    基于python實現(xiàn)從尾到頭打印鏈表

    這篇文章主要介紹了基于python實現(xiàn)從尾到頭打印鏈表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python批量生成幻影坦克圖片實例代碼

    Python批量生成幻影坦克圖片實例代碼

    這篇文章主要給大家介紹了關于如何利用Python批量生成幻影坦克圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Pygame Time時間控制的具體使用詳解

    Pygame Time時間控制的具體使用詳解

    pygame.time 時間控制模塊,是 Pygame 中使用頻率較高的模塊,其主要功能是管理時間和游戲幀數(shù)率,本文就來詳細的介紹一下,感興趣的可以了解一下
    2021-11-11
  • 人臉識別具體案例

    人臉識別具體案例

    出于興趣和對IU的喜愛,筆者花了幾天嘗試用爬蟲從百度圖片獲取人物圖片并下載,利用深度神經網絡從其中識別出人,并將圖片保存至文件夾。若讀者有興趣可以參考下
    2021-04-04

最新評論