装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,它:
- 不能修改被装饰的函数的源代码
- 不能修改被装饰的函数的调用方式
- 满足1、2的情况下给程序增添功能
使用:先写一个装饰器,就是一个函数,参数和返回值都是函数,接受一个函数作为参数,返回一个闭包
而且闭包中执行传递进来的函数,闭包可以在函数的执行前后添加一些功能
#定义一个装饰器
def zhuangshiqi(func):
def wrapper():
print('新加的内容')
func()
print('后面也可以添加')
return wrapper
#等价于show = zhuangshiqi(show)
@zhuangshiqi
def show():
print('原来的内容')
show()
#带参数的装饰器
def zhuangshiqi(func):
def wrapper(*args,**kwargs):
print('今天天气不错,出门打到车!')
func(*args,**kwargs)
return wrapper
@zhuangshiqi
def test(n):
print('我的幸运数字:{}'.format(n))
test(6)
#装饰带返回值的函数
def zhuangshiqi(func):
def wrapper(*args,**kwargs):
return func(*args,*kwargs)+10
return wrapper
@zhuangshiqi
def pingfang(n):
return n*n
print(pingfang(3))