python 装饰器

2020-05-08  本文已影响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 并返回结果。

上一篇下一篇

猜你喜欢

热点阅读