python--装饰器2--理解
一、装饰无参函数
①、原函数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);