一、装饰无参函数
①、原函数target为无参函数
②、装饰函数的内置函数也必须要是无参函数
③、运行原理相当于:target()=decorator(target)()---->最后的()相当于执行内部函数,所以target()相当于执行了内部函数dec2();
1 #装饰器的正确格式
2 def decorator(func):
3 def dec2():
4 func();
5 print('this is decorator');
6 return dec2;------------->装饰器返回一个函数(而函数是可调用的对象) 7
8 @decorator
9 def target():
10 print('this is target')
11 target();------->此处使用正确的调用函数方法,正常运行。
二、装饰有参数的函数
①、原函数需要传入若干个参数
②、内置函数也要传入若干个参数
③、运行原理相当于:dayin(list2)=dec(dayin)(list2) ----->最后一个()相当于执行内置函数,所以dayin(list2)相当于执行了内部函数dec02(list2)
1 #装饰有参数的函数
2 def dec(func):
3 def dec02(*args,**kwargs):------>(*args,**kwargs)相当于可以接受任意类型、个数的参数
4 print('开始');
5 func(*args,**kwargs);
6 return dec02;
7
8 @dec
9 def dayin(info):
10 print(info);
11 list2=[5,6,7,4];
12
13 dayin(list2);
三、带参数的装饰器
#带参数的装饰器
def log(test):------------->在原来的基础上多加一层
def dec(func):
def dec02(*args, **kwargs):
print('开始',test);
func(*args, **kwargs);
return dec02;
return dec;
@log('哈哈')
def dayin(int1,int2):
print(int1+int2);
dayin(4,5);