def log(param): # 这是真正的装饰器,根据条件提供fn def pre_decorator(fn, text=None): @functools.wraps(fn) def wrapper(*args, **kw): print('func:%s log start...' % fn.__name__) # 如果text不为空,则打印text if text is not None: print("param: %s" % param) res = fn(*args, **kw) print('func:%s log end...' % fn.__name__) return res return wrapper # 如果param是可调用对象,直接返回装饰器 if param is isinstance(param, (FunctionType, MethodType)) or hasattr(param, '__call__'): return pre_decorator(param) def decorator(func): return pre_decorator(func, param) return decorator @log def test_log_1(): print('装饰器无参数测试.') @log("qaaasd阿山东山东的山东撒到山东山东的撒到") def test_log_2(): print('装饰器有参数测试.') test_log_1() print('---------------------------------------') test_log_2() # 输出 func:test_log_1 log start... 装饰器无参数测试. func:test_log_1 log end... --------------------------------------- func:test_log_2 log start... param: qaaasd阿山东山东的山东撒到山东山东的撒到 装饰器有参数测试. func:test_log_2 log end...
Sign in to make a reply
滴滴嗒1111