No7.装饰器的进阶

1、带参数的装饰器

FLAGE = True

def timmer_out(flage):
    def timmer(f):
        def inner(*args, **kwargs):
            if FLAGE:
                print("before")
                ret = f(*args, **kwargs)
                print("after")
                return ret
            else:
                ret = f(*args, **kwargs)
                return ret
        return inner
    return timmer


@timmer_out(FLAGE)
def func1(s):
    print("in the func1")
    return s

@timmer_out(FLAGE)
def func2():
    print("in the func2")

ret = func1(111111)
print(ret)
func2()

>>>
before
in the func1
after
111111
before
in the func2
after

对比将FLAGE设置为False:

FLAGE = False

def timmer_out(flage):
    def timmer(f):
        def inner(*args, **kwargs):
            if FLAGE:
                print("before")
                ret = f(*args, **kwargs)
                print("after")
                return ret
            else:
                ret = f(*args, **kwargs)
                return ret
        return inner
    return timmer


@timmer_out(FLAGE)
def func1(s):
    print("in the func1")
    return s

@timmer_out(FLAGE)
def func2():
    print("in the func2")

ret = func1(111111)
print(ret)
func2()
>>>
in the func1
111111
in the func2

2、多个装饰器装饰一个函数

    可以按照俄罗斯套娃来理解多个装饰器装饰一个函数,函数寻找装饰器是按照就近原则的

def wrapper1(f):
    def inner1(*args, **kwargs):
        print("before, in the inner1")
        ret = f(*args, **kwargs)
        print("after, in the inner1")
        return ret
    return inner1

def wrapper2(f):
    def inner2(*args, **kwargs):
        print("before, in the inner2")
        ret = f(*args, **kwargs)
        print("after, in the inner2")
        return ret
    return inner2

@wrapper1
@wrapper2
def func():
    print("in the func")

func()
>>>
before, in the inner1
before, in the inner2
in the func
after, in the inner2
after, in the inner1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值