Python-21_装饰器-02_装饰器实现
-------------------------------------------------- 一、基本:--------------------------------------------------
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)