#只要@deco后面跟括号,都要 先传装饰器参数,返回 再传目标待装饰函数,返回 传目标函数的参数 #这个参数可以是类 def deco(arg):#装饰器的函数在这里传 print('0',arg) def _deco(func):#装饰函数在这里传 print('1',arg) def __deco():#装饰函数的参数在这里传 print("所装饰函数 %s 调用前 [%s]." % (func.__name__, arg)) func() print(" 所装饰函数 %s 调用后 [%s]." % (func.__name__, arg)) return 1 return __deco return _deco #@deco表示调用 deco, #且每当调用接下来定义的函数 myfunc,则为调用 deco 返回的函数 func #与前面不同的地方在于,这里 @deco后面跟了(),是调用状态, #所以会直接传参、调用deco,并调用 函数deco返回的函数_deco #且每当调用接下来定义的函数 myfunc,则为 # 调用 传装饰器参数的deco所返回的 传所装饰函数的_deco所返回的__deco @deco("装饰器参数") def myfunc(): print(" 这一句出来了证明函数 myfunc 调用了") return 'ok'#这里没用了,在deco中有用而已 ''' 这里0 1都打印出来了 ''' @deco("装饰器参数er") def myfunc2(): print(" 这一句出来了证明函数 2 调用了") myfunc() print(' ') a =myfunc2()#1 返回的是deco返回的1 ''' 装饰器呢,测试的时候,例如测试函数性能的时候经常用。 写一些工具的时候,例如协服务程序的定时器的时候也经常用。 总之就有点类似 用在所写代码上的 一些工具 '''
作者:头条号 / 趣味Python
链接:http://toutiao.com/i6313766939822916098/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。