def zsq(fun): def zsq_n(*args,**kwargs) print('这是装饰器需要运行内容') r = fun(*args,**kwargs) print('在被装饰函数执行完成下运行显示') return r return zsq_n @zsq def a(): print('这是一个被装饰的函数') a() >>>这是装饰器需要运行内容 >>>这是一个被装饰的函数 >>>在被装饰函数执行完成下运行显示
装饰器执行操作的顺序和被装饰函数在装饰器内部位置决定
上面这一个是不需要装饰器参数就能执行那么需要参数的装饰器怎么写呢?
def zsq(装饰器形参date): def zsq_n(fun): def zsq_nn(*args,**kwargs) print('这是装饰器参数',data) print('这是装饰器需要运行内容') r = fun(*args,**kwargs) print('在被装饰函数执行完成下运行显示') return r return zsq_nn return zsq_n @zsq('2019.4.17') def a(x+y): return x+y a(5,6) >>>这是装饰器参数2019.4.17 >>>这是装饰器需要运行内容 >>>11 >>>在被装饰函数执行完成下运行显示
只不过是在装饰外部套一层皮.
注意当不需要装饰器参数时,@zsq,
需要时是@zsq(参数)
如果还看不动那么给个比方
def 大臣(太子名): def 做皇帝的位置(太子的能力): r = 太子执行的能力 返回太子的能力r(包装) 皇帝的能力 @大臣 def 太子名(): 执行的太子能力
就像是一个国家皇帝挂了,太子无能为力,于是忠心的大臣扶持太子上位,一共组成皇帝的能力,
pass
>>>>>>>>>>>>>>>>>>>