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="")

 

原文地址:https://www.cnblogs.com/yinliang-liang/p/9883890.html