010_装饰器
作者:互联网
1,时间
import time print(time.time()) #获取当前时间 time.sleep(10) #让程序在执行到这个位置的时候停一会儿
1.1,计算程序运行时间
import time def func(): start = time.time() print('计算时间') time.sleep(0.01) end = time.time() print(end-start) func()
1.2,计算程序运行时间优化
import time def timmer(f): start = time.time() f() end = time.time() print(end - start) def func(): time.sleep(0.01) print('计算时间') timmer(func)
2,不想修改函数的调用方式,但还想在原来的函数前后添加功能
timmer()就是一个装饰器函数,只是对一个函数,有一些装饰作用
import time def func(): #被装饰函数 time.sleep(0.01) print('计算时间') def timmer(f): #装饰器函数 def inner(): start = time.time() f() #被装饰函数 end = time.time() print(end - start) return inner func = timmer(func) func()
3,@装饰符的使用
import time def timmer(f): #装饰器函数 def inner(): start = time.time() f() #被装饰函数 end = time.time() print(end - start) return inner @timmer #这个相当于func = timmer(func)这个语句 def func(): #被装饰函数 time.sleep(0.01) print('计算时间') #func = timmer(func) func()
装饰器函数是一个闭包,因为参数f是函数timmer的变量,所以inner函数是调用的了外部函数的变量,
因为f是外部函数的变量,根据闭包特性,f得到传参后就会一直是代表传来的参数
4,装饰器的执行
5,装饰带参数函数的装饰器
import time def timmer(f): #装饰器函数 def inner(a): start = time.time() ret = f(a) #被装饰函数 end = time.time() print(end - start) return ret return inner @timmer def func(a): #被装饰函数 time.sleep(0.01) print('计算时间') return '返回值' #func = timmer(func) ret = func(1) print(ret)
标签:函数,timmer,010,func,time,print,装饰,def 来源: https://www.cnblogs.com/eternity-twinkle/p/10501736.html