(自学)装饰器的种类

"""
1.time:2020.08.12
2.thinking:①对无参数,无返回值的函数进行装饰
           ②对有参数,无返回值的函数进行装饰
           ③对不定长参数,无返回值的函数进行装饰:利用*args拆包和**kwargs
           ④对有参数,有返回值的函数进行装饰:通用装饰器
           ⑤多个函数有一个装饰器装饰
           ⑥多个装饰器装饰一个函数
           ⑦用类对函数进行装饰
"""

"""------①------"""
def set_func(func):
    def call_func():
        print('1')
        func()

    return call_func


@set_func
def test1():
    print('2')


test1()


print('*'*50)
"""------②------"""
def set_func(func):
    def call_func(aaa):
        print('1')
        func(aaa)

    return call_func


@set_func
def test1(num):
    print('2:%d' % num)


test1(1000)


print('*'*50)
"""------③------"""
def set_func(func):
    def call_func(*args, **kwargs):
        print('1')
        func(*args, **kwargs)

    return call_func


@set_func
def test1(num, *args, **kwargs):
    print('2:%d' % num)
    print(args)
    print(kwargs)
    print('')


test1(10)
test1(10, 100)
test1(10, 100, 1000, keys='hhh')


"""------④------"""
def set_func(func):
    def call_func(*args, **kwargs):
        print('---检测1---')
        return func(*args, **kwargs)
    return call_func


@set_func
def test1(num, *args, **kwargs):
    return num


ret = test1(10, 20, 30)
print(ret)


print('*'*50)
"""------⑤------"""
def set_func(func):
    def call_func(*args, **kwargs):
        print('---装饰器功能---')
        return func(*args, **kwargs)
    return call_func


@set_func
def test1():
    print('函数1')

@set_func
def test2():
    print('函数2')


test1()
test2()


print('*'*50)
"""------⑥------"""
def set_func(func):
    def call_func(*args, **kwargs):
        print('---装饰器1功能---')
        return func(*args, **kwargs)
    return call_func

def set_func2(func):
    def call_func(*args, **kwargs):
        print('---装饰器2功能---')
        return func(*args, **kwargs)
    return call_func

@set_func
@set_func2
def test1():
    print('~~~被装饰函数~~~')


test1()


print('*'*50)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值