装饰器理解

一.理论

  *装饰器实际上就是一个函数

  *有两个特别之处

    1.参数是一个函数

    2.返回值是一个函数

 

二.示例

  def my(func): #参数是一个函数

    def w():

      print("hello,world") #在装饰函数之前输出这句话

      func() #装饰器修饰的函数的输出

      return w #返回一个函数  

    @my

    def run():

      print("run")

      run()

等价于 run=my(run)=w

三.两个注意的点

  1.装饰器中定义的函数,要使用*args,**kwargs两队兄弟的组合.并且在这个函数中执行的时候也要把*args,**kwargs传进去.

  2.需要使用functools.wraps在装饰器中的函数上把传进来的这个函数进行一个包裹,这样就不会丢失原来的函数的__name__等属性.

  from functools import wraps

  def my(func):

    @wraps(func)

    def w(*args,**kwargs):

      print("hello,world")

      func(*args,**kwargs)

    return w

原文地址:https://www.cnblogs.com/haizhongdenta/p/8576132.html