Python-21_裝飾器-02_裝飾器實現
阿新 • • 發佈:2018-11-29
實現 運行 返回值 sleep 多個 功能 rgs 內存 new
-------------------------------------------------- 一、基本:--------------------------------------------------
import time """ # 1、裝飾器框架: def timer(func): def wrapper(): print(func) func() return wrapper """ # 2、裝飾器實現例子: # 1)、裝飾器: def timer(func): def wrapper(): start_time= time.time() func() # 運行的是foo() stop_time = time.time() print("被裝飾函數test運行時間 %s" % (stop_time - start_time)) return wrapper # 2)、被裝飾函數: @timer # @timer 就相當於 foo=timer(foo) 需要放在被裝飾函數的上面!!!! def foo(): time.sleep(2) print("需要增加功能的原程序") return "原程序返回值" # 3)、調用裝飾器: # foo=timer(foo) # timer(foo) 返回的是wrapper內存地址 foo() # 執行的是wrapper
--------------------------------------------------二、加上返回值:--------------------------------------------------
import time # 1)、裝飾器: def timer(func): def wrapper(): start_time=time.time() res=func() # 運行的是foo() 如果原程序有return返回值,這裏將func()運行結果賦值給res,然後return res stop_time=time.time() print("被裝飾函數foo運行時間 %s" %(stop_time-start_time)) return res return wrapper # 2)、被裝飾函數: @timer # @timer 就相當於 foo=timer(foo) 需要放在被裝飾函數的上面!!!! def foo(): time.sleep(2) print("需要增加功能的原程序") return "原程序返回值" # 3)、調用裝飾器: # foo=timer(foo) # timer(foo) 返回的是wrapper內存地址 a=foo() # 執行的是wrapper print(a)
-------------------------------------------------- 三、加上參數:--------------------------------------------------
import time # 1)、裝飾器: def timer(func): def wrapper(*args,**kwargs): # *args,**kwargs 可以接收任何個數(多個)的參數 start_time=time.time() res=func(*args,**kwargs) # 運行的是foo() 如果原程序有return返回值,這裏將func()運行結果賦值給res,然後return res stop_time=time.time() print("被裝飾函數foo運行時間 %s" %(stop_time-start_time)) return res return wrapper # 2)、被裝飾函數: @timer # @timer 就相當於 foo=timer(foo) 需要放在被裝飾函數的上面!!!! def foo(name,age): time.sleep(2) print("需要增加功能的原程序 名字 %s 年齡 %s" %(name,age)) return "原程序返回值" # foo=timer(foo) a=foo("newmet",18) print(a)
-------------------------------------------------- 四、裝飾器實現匯總:--------------------------------------------------
import time # 定義一個求取函數運行時間的、裝飾器框架 def timer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time=time.time() print("函數運行時間:%s" %(start_time-stop_time)) return res return wrapper # 原始函數--需要被裝飾的函數 @timer def foo(name,age): time.sleep(3) print("from the test 名字 %s 年齡 %s" %(name,age)) return "這是test的返回值" res=foo("newmet",16) print(res)
Python-21_裝飾器-02_裝飾器實現