Python 装饰器

装饰器设计模式

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

在Python中,使用@语法糖修饰一个函数,把@deco放到func()函数的定义处,相当于执行了语句:

func = deco(func)

不带参数的装饰器

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

@log
def now():
    print(time.strftime('%Y-%m-%d',time.localtime(time.time())))

输出结果:

call now():
2017-06-19

带参数的装饰器

def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s call %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log(‘Alan’)
def now():
print(time.strftime(‘%Y-%m-%d’,time.localtime(time.time())))

输出结果:

Alan call now():
2017-06-19

你可能感兴趣的:(Python 装饰器)