装饰器是以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出。装饰器的语法是将@装饰器名,放在被装饰对象上面。
def outer(func): # 装饰函数
def inner():
print("认证成功!")
result = func()
print("日志添加成功")
return result
return inner
@outer
def f1(): # 被装饰函数
print("业务接口......")
f1()
装饰器其实就是将要装饰的函数作为参数传给装饰器,在装饰内部返回一个函数 并赋值给原函数
f1=outer(f1)
f1()
执行顺序:1. 当运行到 @outer时 执行开始执行装饰器的语法规则。规则是:被装饰函数的名字会被当作函数形参传递给装饰函 数。装饰函数执行它自己内部的代码后,会将它的返回值赋值给被装饰函数。原来f1函数被当作参数传递给了func, 而f1这个函数名之后会指向inner函数。
2.执行f1())时 实际上是执行了 inner()。因为通过1步骤return inner 赋给了f1() ,而原来声明的f1函数 则在inner函数中赋 给了result