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