Python 裝飾器

當有多個函數(shù)需要擁有相同功能時,裝飾器就起到很大作用,在不改變原有函數(shù)代碼時,用裝飾器給函數(shù)增加一個小功能很是方便。
譬如我現(xiàn)在有幾個函數(shù),我想知道它們的執(zhí)行時間,那么我可以寫一個裝飾器來實現(xiàn)。

def count_time(func):
    def int_time(*args,**kwargs):
        start_time = datetime.datetime.now() #程序開始時間
        func(*args,**kwargs)
        over_time = datetime.datetime.now()  #程序結束時間
        total_time = (over_time-start_time).total_seconds()
        print('%s executed in %s seconds' %(func.__name__,total_time))
    return int_time

這里使用args和kwargs允許我們在函數(shù)中傳遞多個參數(shù)
我希望計算幾個數(shù)的加減乘除,定義不同的函數(shù)

def func1(x,y):
    time.sleep(2.5)
    return x + y

def func2(x,y,z):
    time.sleep(2.5)
    return x*y*z

用@符號調用裝飾器
下面給出完整代碼

import datetime,functools,time

def count_time(func):
    def int_time(*args,**kwargs):
        start_time = datetime.datetime.now() #程序開始時間
        func(*args,**kwargs)
        over_time = datetime.datetime.now()  #程序結束時間
        total_time = (over_time-start_time).total_seconds()
        print('%s executed in %s seconds' %(func.__name__,total_time))
    return int_time

@count_time
def func1(x,y):
    time.sleep(2.5)
    return x + y

@count_time
def func2(x,y,z):
    time.sleep(2.5)
    return x*y*z

func1(2,5)
func2(4,6,3)

運行結果


使用這個裝飾器相當于
func=count_time(func),int_time作為返回值賦值給func

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 裝飾器函數(shù) 楔子 作為一個會寫函數(shù)的python開發(fā),我們從今天開始要去公司上班了。寫了一個函數(shù),就交給其他開發(fā)用...
    go以恒閱讀 306評論 0 0
  • Python裝飾器的高級用法(翻譯) 原文地址https://www.codementor.io/python/t...
    城南道閱讀 4,872評論 1 22
  • 每個人都有的內褲主要功能是用來遮羞,但是到了冬天它沒法為我們防風御寒,咋辦?我們想到的一個辦法就是把內褲改造一下,...
    chen_000閱讀 1,403評論 0 3
  • 一、理論 1、裝飾器定義 本質上是函數(shù)(裝飾其他函數(shù)),就是為其他函數(shù)添加附加功能。 2、原則 1、不能修改被裝飾...
    SlashMan閱讀 436評論 0 0
  • 平安夜收到很多會員寶寶的祝福,還有朋友的關心[玫瑰]今天一個會員阿姨見到我就給了我一個大抱抱 說看到我就喜歡我我相...
    心念齋閱讀 130評論 0 0

友情鏈接更多精彩內容