python装饰器中的@wraps

  

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(函数)可以让函数名变回来。

python装饰器中的@wraps