#只要@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('\n') a =myfunc2()#1 返回的是deco返回的1
'''
装饰器呢,测试的时候,例如测试函数性能的时候经常用。
写一些工具的时候,例如协服务程序的定时器的时候也经常用。
总之就有点类似 用在所写代码上的 一些工具
'''
作者:头条号 / 趣味Python
链接:http://toutiao.com/i6313766939822916098/
来源:头条号(今日头条旗下创作平台)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。