# 装饰器:为了增强某个func的功能,但又不修改func的内部实现。装饰器是"a = func()的拓展延申:函数对象可以赋值给变量" # 写法:def 装饰器名(被修饰的func名):def wrapper(*args,**kw):func(*args,**kw)。以下是装饰器的基本实现 # 装饰器基础使用:对func函数装饰 # 把@decorate放到func()的定义处,相当于执行了func = decorate(func) def decorate_func_name(func): def wrapper(*args,**kwargs): # wrapper装饰器里对func进行扩展的函数,返回func的执行结果(return func()) print("before wrapper") t = func(*args,**kwargs) print("after wrapper") return t return wrapper # 返回装饰器的执行结果 # 装饰器进阶使用:对装饰器传入自定义参数(注意:不是对被修饰函数func传参,是对装饰器decorate传参)。做法:在原来的decorate外面再套一层用来传参,在wrapper里处理传入的参数 # 把@login(name="t",pwd="t")放到func()的定义处,相当于执行了func = login(name="t",pwd="t")(func) def login(name="admin",pwd="123456"): def decorate(func): # @functools.wraps(func):加在decorate内、wrapper函数上,然后可以在wrapper内通过func.__name__得到被装饰函数func的信息 @functools.wraps(func) def wrapper(*args,**kw): print("rec param:"+name, pwd) print("before wrapper,funcName:"+func.__name__) t = func(*args, **kw) print("after wrapper") return t return wrapper return decorate
标签:name,python,wrapper,decorate,func,装饰,def From: https://www.cnblogs.com/jinziguang/p/18289521