decorator的练习

来源:互联网 发布:ubuntu mate 树莓派 编辑:程序博客网 时间:2024/06/08 15:45

在廖雪峰老师那里学习中遇到的题目

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

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

@logdef f():    pass

又支持:

@log('execute')def f():    pass

第一题

def log(func):    def wrapper(*args, **kw):        print 'begin call'        func(*args, **kw)        print 'end call'    return wrapper@logdef now():    print 'this func'


第二题

def log1(*text):    def decorator(func):        def wrapper(*args, **kw):            print '%s %s():' % (text, func.__name__)            return func(*args, **kw)        return wrapper    return decorator@log1('execute')def now1():    print '2013-12-25'print now1()
毕竟刚接触Python,第二个感觉有点怪怪的,如果大家有更好的想法可以直接提出来。