装饰器

代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

>>> def now():
...     print('2015-3-25')
...
>>> f = now
>>> f()
2015-3-25

装饰器的定义及使用

import functools

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

@log
def now():
    print('2015-3-25')

带参数的装饰器函数及使用

import functools

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

@log('execute')
def now():
    print('2015-3-25')

@functools.wraps(func)实际上实现了wrapper.name = func.name

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