装饰器
定义:本质是函数,(装饰其他函数),就是为其他函数添加附加功能。
原则:
-
不能修改被装饰的函数的源代码
-
不能修改被装饰的函数的调用方式
-
不能影响原函数的返回值
公式:高阶函数 + 嵌套函数 + 运用函数即变量的思想 = 装饰器
示例:
#装饰器,为函数test加上计时功能
def timer(func):
def secend(*name):
start_time = time.time();
res = func(*name)
end_time = time.time();
print("运行时间为%s秒"%(end_time - start_time))
return res
return secend
@timer
def test():
time.sleep(1)
print("this is test func")
-----------------------------------------------------------------------分割线---------------------------------------------------------------------------
在搞清楚装饰器之前,我们需要理解3个东西:
1、函数即“变量”:
函数(名)可以相当于一个变量,可以进行赋值等等操作,实际上函数名只是函数内容的存放地址,可以把它等价为 x = y 这样赋值(假设x,y均为函数名)。
2、高阶函数:
高阶函数形式有两种:
(1)把一个函数名当作实参传给另一个函数(为不修改被装饰函数源代码的情况下为其添加功能做准备)。
(2)返回值是一个函数名或者返回值中包含函数名(为不修改函数的调用方式做准备)。
3、嵌套函数
就是函数内部又有一个函数,比如下面:
#嵌套函数
def a():
print('a')
def b():
print('b&#