python装饰器中的@wraps
第一段代码:没有添加@wraps
<代码> def user_login_confirm(名称): 打印(“我是”,名称) def deco_fun (view_func): 打印(“准备变身…”) def包装(): view_func () 打印(“变身完成…”) 返回包装 返回deco_fun @user_login_confirm(“小辣椒”) def托尼(): 打印(“我是”,tony.__name__) 托尼()代码>
运行结果:
<代码>我是小辣椒 准备变身…… 我是包装 变身完成…代码>
第二段代码:多加一个托尼函数
<代码> def user_login_confirm(名称): 打印(“我是”,名称) def deco_fun (view_func): 打印(“准备变身…”) def包装(): view_func () 打印(“变身完成…”) 返回包装 返回deco_fun @user_login_confirm(“小辣椒”) def托尼(): 打印(“我是”,tony.__name__) def托尼(): 打印(“我是”,tony.__name__) 托尼()代码>
运行结果:
<代码>我是小辣椒 准备变身…… 我是托尼。代码>
第三段代码:添加了@wraps
<代码>从functools进口包装 def user_login_confirm(名称): 打印(“我是”,名称) def deco_fun (view_func): 打印(“准备变身…”) @wraps (view_func) def包装(): view_func () 打印(“变身完成…”) 返回包装 返回deco_fun @user_login_confirm(“小辣椒”) def托尼(): 打印(“我是”,tony.__name__) 托尼()代码>
结论:
装饰器将被装饰函数变为了包装函数,连函数名也变了,通过@wraps(函数)可以让函数名变回来。