python - 装饰器(Decorator)
理解装饰器前,先要知道函数闭包
,python闭包
装饰器
对于装饰器通俗的理解,就是用来丰富函数功能
的,根据业务的需求,可能某一函数被不同的A、B、C、D调用,但A、B需要添加更加丰富的功能,此时,就需要在A、B的调用处用修饰器
修饰,增加业务需求的功能。
最简单的装饰器
## 装饰器
def dcorator(func):
a = 10
def wrapper(*args,**kwargs):
print('此处使用了装饰器')
func(*args,**kwargs)
print('同时还可以使用装饰器中的变量:a= %d' % a)
print('方法结束')
return wrapper
@dcorator
def print_name(name:str):
print('我的名字叫 %s' % name)
print_name('小明')
输出结果:
此处使用了装饰器
我的名字叫 小明
同时还可以使用装饰器中的变量:a= 10
方法结束
代码解读:
虽然最后一行看似调用了print_name方法,但是实际调用的是wrapper方法,装饰器丰富了函数的功能。
带参数的装饰器
其实是嵌套了三层的函数。
## 带参数的装饰器
def func_with_param(text:str):
def dcorator(func):
a = 10
def APP(*args,**kwargs):
print('这是一个修饰器参数:%s'% text)
print('此处使用了装饰器')
func(*args,**kwargs)
print('同时还可以使用装饰器中的变量:a= %d' % a)
print('方法结束')
return APP
return dcorator
@func_with_param('我是修饰器参数啊!')
def print_name(name:str):
print('我的名字叫 %s' % name)
print_name('小明')
输出结果:
这是一个修饰器参数:我是修饰器参数啊!
此处使用了装饰器
我的名字叫 小明
同时还可以使用装饰器中的变量:a= 10
方法结束
至此,装饰器这个有点费解的特性也没什么神秘了。
装饰器这一语法体现了Python中函数是第一公民,函数是对象、是变量,可以作为参数、可以是返回值,非常的灵活与强大。