装饰器(带参数)

Posted MKY-技术驿站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器(带参数)相关的知识,希望对你有一定的参考价值。

如果明白装饰器的原理那么带参数的装饰器就很容易理解了

代码:

def s1(func):
    def inner(a,b):    #f1=inner(a,b) 接受2个参数,然后在把2个参数传递给func(a,b)
        print("hello")
        r =func(a,b)
        print("word")

        return r
    return inner
@s1
def f1(a,b):
    print(a+b)


    
f1(20,50)

 

现在有个问题如果装饰的函数有的参数是1个有的是2个怎么办?

@s1
def f1(a):
    print(a+b)


@s1
def f2(a,b):
    print(a+b)

@s1
def f3(a,b,c):
    print(a+b) 

 

解决这个很简单:

def s1(func):
    def inner(*args,**kwargs):  
        print("hello")
        r =func(*args,**kwargs)    #接受万能参数
        print("word")

        return r
    return inner
@s1
def f1(a):
    print(a)


@s1
def f2(a,b):
    print(a,b)


@s1
def f3(a,b,c):a
    print a,b,c

f1("f1===a")  #传递一个参数
f2(10,20)        #传递2个参数
f3(11,22,{"aa":"bb"})   #传递三个参数

 

以上是关于装饰器(带参数)的主要内容,如果未能解决你的问题,请参考以下文章

带参数的 Python 装饰器类

Python全栈__函数的有用信息带参数的装饰器多个装饰器装饰一个函数

带参数的装饰器

装饰器的应用-装饰器带参数和不带参数

Python装饰器实现带参数和不带参数

10-5装饰器进阶_带参数的装饰器多个装饰器装饰同一个函数