def logger(func): def new_func(*args, **kwds): try: print 'enter %s' % func.func_name return func(*args, **kwds) finally: print 'exit %s' % func.func_name return new_func def add(a, b): return a+b add = logger(add) print add(20, 22)