Discuss / Python / 答案

答案

Topic source

paulfoo

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import functools

def log(arg):
    def decorator(func=arg):
        text = 'call' if func == arg else arg
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('begin %s %s():' % (text, func.__name__))
            return (func(*args, **kw),
                    print('end %s %s():' % (text, func.__name__)))[0]
        return wrapper
    return decorator() if callable(arg) else decorator

@log
def f():
    pass

f()

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

f()


# functools.wraps, 不知道对不对
def wraps(func1):
    def decorator(func2):
        def wrapper(*args, **kw):
            return func2(*args, **kw)
        wrapper.__name__ = func1.__name__
        return wrapper
    return decorator

  • 1

Reply