Python高级系统知识之(一):python装饰器

背景:学习python的人肯定听过一个词,装饰器,那到底什么是装饰器,网络知识有很多介绍,这里,我基于自己的理解,进行一个系统总结,希望能让更多人加深理解

作用:概括的讲,装饰器的作用就是为已经存在的函数或对象添加额外的功能

实战:

应用场景:
1,引入日志
2,函数执行时间统计
3,执行函数前预备处理
4,执行函数后清理功能
5,权限校验等场景
6,缓存
7,事务处理

装饰器怎么用:

NO1.简单装饰器(不带参数):

背景:我们代码里面经常有各种函数,为了监控到哪个函数出了问题,可以不修改代码的情况下为他们加入日志监控(当然,这只是其中一种应用,具体懂了装饰器之后,会有更多牛叉的应用)


def debug(func):
    def error_check():
        print('{func} error'.format(func=func.__name__))
        return func()

    return error_check


@debug
def decorator_fun_a():
    print('do sth')
    pass


@debug
def decorator_fun_b():
    print('do sth')
    pass

 

NO2.带参数装饰器(简单参数):

def debug(func):
    def error_check(arg):
        print('{func} error'.format(func=func.__name__))
        return func(arg)
    return error_check


@debug
def decorator_fun_a(arg):
    print('do sth use {arg}'.format(arg=arg))
    pass


@debug
def decorator_fun_b(arg):
    print('do sth {arg}'.format(arg=arg))
    pass

NO3.多参数的装饰器(通用):


def debug(func):
    def error_check(*args, **kwargs):  # 能解析一切参数了
        print('{func} error'.format(func=func.__name__))
        return func(*args, **kwargs)

    return error_check


@debug
def decorator_fun_a(arg):
    print('do sth use {arg}'.format(arg=arg))
    pass


@debug
def decorator_fun_b(arg1, arg2):
    print('do sth {arg1},{arg2}'.format(arg1=arg1, arg2=arg2))
    pass

NO4.更高阶的装饰器:

背景:现在需要针对不同函数打印不同日志级别

def debug(level):
    def log_check(func):
        def log_check_inner(*args, **kwargs):  # 能解析一切参数了
            print('{level} in {func}'.format(level=level, func=func.__name__))
            return func(*args, **kwargs)
        return log_check_inner
    return log_check


@debug(level='DEBUG')
def decorator_fun_a(arg):
    print('do sth use {arg}'.format(arg=arg))
    pass


@debug(level='ERROR')
def decorator_fun_b(arg1, arg2):
    print('do sth {arg1},{arg2}'.format(arg1=arg1, arg2=arg2))
    pass

有点绕,但是也好理解,你可以把它们当成函数,一个个执行,先执行最里面的,再执行外面的,debug调试一下就能看出来

 

拓展学习:希望大家可以有空拓展学习下类装饰器,以及python自带的装饰器,这里就不写了

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值