python @装饰器

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

在函数调用前后自动打印日志,但又不希望修改now()函数的定义

编写一个decorator,能在函数调用的前后打印出'begin call''end call'的日志。

再思考一下能否写出一个@log的decorator,使它既支持:

@log
def f():
    pass

又支持:

@log('execute')
def f():
    pass
__author__ = 'wxy'

import functools


def log(text=None):
    def decorator(func):
        # wrapper.__name__ = func.__name__
        @functools.wraps(func)
        def wrapper(*args,**kw):
            if text:
                print "begin call",func.__name__,'input is ',text
            else:
                print "begin call",func.__name__
            rs = func(*args,**kw)
            print 'end call'
            return rs
        return wrapper
    return decorator


@log()
def now():
    print '2017-11-06 '

now()
print now.__name__

 

posted @ 2017-11-06 11:30  阿团团子  阅读(115)  评论(0)    收藏  举报