关于Python的装饰器
作为一个Python新手,Python的装饰器看书有了自己的收获:
装饰器相当于给函数增加了新的功能:
1.不带参数的装饰器
#装饰器模板
#装饰器模板
from functools import wraps #引入wraps
def new_decorator(f): #装饰器名字,f为被装饰的函数
@wraps(f) ##固定搭配
def decorated(*args,**kwargs): ##内层需要定义的函数操作在这里面完成
print(f.__name__) #这里打印被装饰的函数名字
return f(*args,**kwargs) #返回函数名
return decorated
接下来是被装饰的函数:
@new_decorator
def func():
print('I am a function!!')
最后是验证:
func()
##输出如下
func
I am a function!!
理解:通过在一个函数之前加装饰器,可以赋予函数新的功能,上面例子中,装饰器给每一个被装饰的函数打印被装饰函数的名字,最后 return f(*args,**kwargs) ,执行函数自身。
为什么要wrap?
wrap接受函数进行装饰,如果不加的话,会失去被装饰函数的一些属性,比如,你不加这个wrap,打印func函数名一下,就知道了
2.带参数的装饰器
#装饰器模板
from functools import wraps #引入wraps
def new_decorator(x): #装饰器函数名字(此为带参数的装饰器)
def new_decorator2(f): #f为被装饰的函数
@wraps(f) ##固定搭配
def decorated(*args,**kwargs): ##内层需要定义的函数操作在这里面完成
print(f.__name__)
for i in range(x):
print(i)
return decorated #返回函数名
return new_decorator2 #带有参数的装饰器
@new_decorator(12)
def fun():
print('this is the decorator!!')
验证:
fun()
输出如下:
fun
0
1
2
3
4
5
6
7
8
9
10
11
才疏学浅,欢迎指正及交流!!