python学习笔记--装饰器的多参数

"""
python装饰器的参数

"""

def func1(function_name):
    print("--------装饰器---1--------")
    def fucn1_inner(a,b):
        print("-----fucn1_inner----start---------")
        function_name(a,b)
        print("-----fucn1_inner----end---------")
    print("--------装饰器---2--------")
    return fucn1_inner


@func1
def test(a,b):
    print("-------test()---------")
    print("a=%d, b=%d"%(a,b))


test(1,2)


print("-"*120)
"""
传入多参数
"""
def func2(function_name):
    print("--------装饰器---1--------")
    def fucn2_inner(*args,**kwargs):#传入多参数都可以
        print("-----fucn1_inner----start---------")
        function_name(*args, **kwargs)
        print("-----fucn2_inner----end---------")
    print("--------装饰器---2--------")
    return fucn2_inner


@func2
def test2(a,b):
    print("-------test()---------")
    print("a=%d, b=%d"%(a,b))

@func2
def test3(a,b,c):
    print("-------test()---------")
    print("a=%d, b=%d c=%d"%(a,b,c))
test2(111,222)
test3(444, 555, 666)


函数调用图:

运行结果:

--------装饰器---1--------
--------装饰器---2--------
-----fucn1_inner----start---------
-------test()---------
a=1, b=2
-----fucn1_inner----end---------
------------------------------------------------------------------------------------------------------------------------
--------装饰器---1--------
--------装饰器---2--------
--------装饰器---1--------
--------装饰器---2--------
-----fucn1_inner----start---------
-------test()---------
a=111, b=222
-----fucn2_inner----end---------
-----fucn1_inner----start---------
-------test()---------
a=444, b=555 c=666
-----fucn2_inner----end---------





猜你喜欢

转载自blog.csdn.net/u011662320/article/details/80979040
今日推荐