装饰器
本质就是函数,为其他函数添加附加功能。
原则:
- 不修改被修饰函数的源代码;
- 不修改被修饰函数的调用方式;
解压序列
a,b,c = (1,2,3)
#a=1
#b=2
#c=3
装饰器实例
装饰器=高阶函数+函数嵌套+闭包
import time
def timmer(func):
def wrapper(*args,**kwargs): #cal('tiger',age=18) --> args=('tiger') kwargs=['age':18]
start_time= time.time()
f = func(*args,**kwargs) #cal(*('tiger'),**['age':18])
stop_time = time.time()
print("函数运行时间为:%s" %(stop_time-start_time))
return f
return wrapper
@timmer
def cal(name,age):
print(name,age)
return res
a = range(10)
res = cal(a)
print(res)
高阶函数不能实现装饰器
import time
def foo():
time.sleep(3)
print("this is foo")
def test(func):
start_time = time.time()
func()
end_time = time.time()
print(end_time-start_time)
return func
foo = test(foo)
foo()