美文网首页
python 装饰器

python 装饰器

作者: 三元一只十元三只 | 来源:发表于2020-05-08 10:07 被阅读0次

    python 的装饰器(Decorator)能够在不改变原有代码结构的同时,添加诸如:日志记录,性能测试,事务处理,缓存等功能。
    首先举个例子,比如一个函数,我们要在它执行的时候记录一条日志:

    import time
    
    
    def now():
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        logging.info(‘func now() is running’)    #记录日志代码
    

    上例中,我们在now函数中新增了 logging.info 用于记录日志,如果其他函数需要类似的功能,还需要在其他函数中添加相应的 logging 方法,这种做法对于代码的结构有影响, 并且当面对众多有类似需求的函数时,工作量会增大,代码冗余度高。接下来使用 装饰器 进行改造

    import time
    
    def log(func):
        def wrapper(*args, **kw):
            print('func %s() is running' % func.__name__)
            return  func(*args, **kw)
        return wrapper
    
    @log
    def now():
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    

    @ 符号是 装饰器的语法糖, 把定义好的装饰器通过@符号放在需要记录日志的函数定义前,这样在调用now 函数时就会自动执行 log 函数,log 函数是我们之前了解过的高阶函数,它接收函数作为参数。通过内部的 wrapper 函数,调用 func 并返回结果。

    相关文章

      网友评论

          本文标题:python 装饰器

          本文链接:https://www.haomeiwen.com/subject/bspxnhtx.html