python装饰器
1 无参装饰器,包装无参函数
#无参装饰器包装无参函数 def decorator(func): print('我是装饰器') return func def decorator1(func): print('我是装饰器1') return func @decorator @decorator1 def function(): print('我是函数') function()
'''
执行顺序为:decorator1() -> decorator() -> function()
''' #装饰器就相当于下面的调用 #decorator(function())
2 无参装饰器,包装有参函数
#无参装饰器包装有参函数 def decorator(func): def x(*args,**kwargs):#处理传入函数的参数 print('装饰器开始') func(*args,**kwargs)#调用函数 print('装饰器里面函数参数:',args,kwargs) print('装饰器结束') return x @decorator def function(age,name,sex,tel=110): print('我是函数参数:',age,name,sex,tel) function(18,'小王','女')
3 带参装饰器,包装无参数函数
#带参装饰器包装无参数函数 ''' 在装饰器的内部在定义一个装饰器,来修饰函数 ''' def decorator(decorator_arg): print('我是装饰器参数:',decorator_arg) #装饰器参数 def newdecorator(func): #最终返回的函数,来调用被修饰的函数 return func #返回被修饰的函数 return newdecorator @decorator('这是装饰器参数') def function(): print('我是函数') function()
4 带参数装饰器,包装带参数函数
#带参数装饰器,包装带参数函数 ''' 带参数的装饰器,在内部定义一个新的装饰器从新装饰函数, 在定义一个方法来接受函数的参数,在这个函数的内部调用函数并把函数的参数传入 ''' def decorator(decorator_arg): def newdecorator(func):#func就相当于function函数 def x(*args,**kwargs):#处理函数的参数 print('装饰器开始') func(*args,**kwargs)#调用函数 print('装饰器结束') print(decorator_arg,func,args,kwargs) return x return newdecorator @decorator('我是decorator_arg') def function(age,name,sex,tel=110): print('我是函数参数:',age,name,sex,tel) function(18,'翠花',sex="女")