装饰器
1)装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是
一个函数对象。
2)它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。
3)装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
概况地讲,装饰器的作用就是为已经存在的对象添加额外的功能
添加装饰器
1.未加装饰器,定义两个函数,实现两个计算结果并打印
(1)代码
# coding:utf-8
def add(a, b):
print("加法的结果是:", (a+b))
def sub(a,b):
print("减法的结果是:", (a-b))
add(10,20)
sub(50,10)
(2)结果
2.添加装饰器
(1)现在要求每个方法执行print前后加上“开始执行...”和“执行结束...”两句话,如果函数太多,一个个加上这两句语句非常不实际,且不合理,如果后期要求字符串变化再依次去更改,工作量是相当大的,此时用装饰器再合适不过。
(2)添加装饰器需要用到装饰糖
装饰糖:@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作
①代码(此次我们先将add函数加上装饰器)
# coding:utf-8
def add_finally(func):
def add_two(a, b):
print("开始执行...")
func(a, b)
print("执行结束...")
return add_two
@add_finally
def add(a, b):
print("加法的结果是:", (a+b))
def sub(a,b):
print("减法的结果是:", (a-b))
add(10,20)
print("------------------------")
sub(50,10)
②结果
总结:添加了装饰器的加法函数,实现了在print前后加上了语句
@add_finally:相当于add = add_finally(add)
第一个add:为了接受add_finally的返回结果add_two
第二个add:是def add函数,作为一个实参传递给形参func
①代码(全部加上装饰器)
# coding:utf-8
def add_finally(func):
def add_two(a, b):
print("开始执行...")
func(a, b)
print("执行结束...")
return add_two
@add_finally
def add(a, b):
print("加法的结果是:", (a+b))
@add_finally
def sub(a,b):
print("减法的结果是:", (a-b))
add(10,20)
print("------------------------")
sub(50,10)
②结果