【Python面向对象】(7) 带参数的装饰器
(1)实现简单的带参
""" 带参数的装饰器 """ def log(name=None): """记录函数执行的日志""" def decorator(func): def wrapper(): print("{0}.start...".format(name)) func() print("{0}.end...".format(name))return wrapper return decorator @log() def hello(): print("hello...") @log("test") def test(): print("test...") if __name__ == "__main__": hello() # 输出: # None.start... # hello... # None.end... test() # 输出: # test.start... # test... # test.end...
(2)包含运算的带参
""" 带参数的装饰器 """ def log(name=None): """记录函数执行的日志""" def decorator(func): # *args表示传入元组类型,**kwargs表示传入字典类型 def wrapper(*args, **kwargs): print("{0}.start...".format(name)) print(args) print(kwargs) res = func(*args, **kwargs) print("{0}.end...".format(name)) return res return wrapper return decorator @log("from add") def add(a, b, *args, **kwargs): return a+b if __name__ == "__main__": result = add(5, 6, k=5, v=6) print(result) # 输出: # from add.start... # (5, 6) # {'k': 5, 'v': 6} # from add.end... # 11