装饰器也可以带有参数:
def test_org(arg): #最外层再嵌套一个函数
def test(fun):
def test_in(*args, **kwargs):
print("log 日志为---%s----- "%arg)
a = fun(*args, **kwargs)
return a
return test_in
return test #注意返回函数体
@test_org("这个是装饰器的参数") #装饰器调用最外层
def fun():
return "被装饰函数"
print(fun())
运行结果:
log 日志为---这个是装饰器的参数-----
被装饰函数
执行过程如下 :
- @test_org(“arg”) ,先执行 test_org 函数 , 执行这个函数 之后 ,看看返回的是什么 ,
- 返回的是 test, test 是一个闭包函数, 符合装饰器的特征, 然后再执行装饰器 ,进行装饰
- 传递的参数 可以在 test_in 函数体应用,这样就达到了;