#!/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
Sign in to make a reply
paulfoo