装饰器:不带参数、带参数、又返回值

#不带参数的装饰器timer1
def timer1(func):
    def inner():
        print('执行函数前要做的')
        func()
        print('执行函数后要做的')
    return inner

@timer1  #func1 =timer(func2)
def func1():
    print('我是函数func')
func1()

输出:

执行函数前要做的
我是函数func
执行函数后要做的

#带参数的装饰器timer2
def timer2(func):
    def inner(args):
        print('执行函数前要做的')
        func(args)
        print('执行函数后要做的')
    return inner
@timer2
def func2(name):
    print('hi,%s'%name)
func2('kobe')

输出:

执行函数前要做的
我是函数func
执行函数后要做的
# 带多个参数的装饰器timer3
def timer3(func):
    def inner(*args,**kwargs):
        print('执行函数前要做的')
        func(*args,**kwargs)
        print('执行函数后要做的')
    return inner
@timer3
def func3(name1,name2):
    print(name1+' VS '+name2)
func3('kobe','james')

输出:

 执行结果:
执行函数前要做的
kobe VS james
执行函数后要做的
#待返回值的装饰器timer4
def timer4(func):
    def inner(*args, **kwargs):
        print('执行函数前要做的')
        re = func(*args, **kwargs)   #把func的返回值存到re
        print('执行函数后要做的')
        return re                   #返回re
    return inner

@timer4
def func4(a):
    print('a')
    return 'func4 is over'


func4('a')
print(func4('aaaaaa'))  #打印func4的返回值

输出:

执行函数前要做的
a
执行函数后要做的
func4 is over
#带开关的装饰器outer
def outer(flag):
    def timer5(func):
        def inner(*args,**kwargs):
            if flag:
                print('当F为True时执行我')
                re = func(*args,**kwargs)
                print('True 执行完')
            return re
        return inner
    return timer5

@outer(True)   #当outer中的参数为true时,装饰器不运行,False时,装饰器不运行,类似于开关
def func5():
    print('我是测试带开关的装饰起的func5')
    return 'func5func5'
@outer(True)
def func6():
    print('周一不运行')

func5()
print(func5())

输出:

当F为True时执行我
我是测试带开关的装饰起的func5
True 执行完
当F为True时执行我
我是测试带开关的装饰起的func5
True 执行完
func5func5

 

 
 

 

转载于:https://www.cnblogs.com/weiyumangmang/p/7391416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值