@dec
def func(): # 被装饰对象
passdef foo(): print("第一次定义的foo()函数") def foo(): print("第二次定义的foo()函数") foo() # 结果 第二次定义的foo()函数
def outer(func): def inner(): print("内层函数inner()") return inner def foo(): print("原始函数foo()") outer(foo) outer(foo())
# 基础平台部负责内部应用程序和API的开发 def f1(): print("业务部门1的数据接口") def f2(): print("业务部门2的数据接口") def f3(): print("业务部门3的数据接口") def f100(): print("业务部门100的数据接口") # 业务部门调用各自的API f1() f2() f3() f100()
# 基础平台部负责内部应用程序和API的开发 def f1(): # 加入认证程序代码 print("业务部门1的数据接口") def f2(): # 加入认证程序代码 print("业务部门2的数据接口") def f3(): # 加入认证程序代码 print("业务部门3的数据接口") def f100(): # 加入认证程序代码 print("业务部门100的数据接口") # 业务部门调用各自的API f1() f2() f3() f100()
def login(): print("认证成功") # 基础平台部负责内部应用程序和API的开发 def f1(): login() print("业务部门1的数据接口") def f2(): login() print("业务部门2的数据接口") def f3(): login() print("业务部门3的数据接口") def f100(): login() print("业务部门100的数据接口") # 业务部门调用各自的API f1() f2() f3() f100()
def outer(func): def inner(): print("认证成功") result = func() print("日志添加成功") return result return inner # 基础平台部负责内部应用程序和API的开发 @outer def f1(): print("业务部门1的数据接口") @outer def f2(): print("业务部门2的数据接口") @outer def f3(): print("业务部门3的数据接口") @outer def f100(): print("业务部门100的数据接口") # 业务部门调用各自的API f1() f2() f3() f100()
def outer(func): # 装饰函数
def inner():
print("认证成功!")
result = func()
print("日志添加成功")
return result
return inner
@outer
def f1(): # 被装饰函数
print("业务部门1数据接口......")def outer(func):
def inner(username):
print("认证成功")
result = func(username)
print("日志添加成功")
return result
return inner
@outer
def f1(name):
print("{}正在调用业务部门1的数据接口".format(name))
# 调用方法
f1("Jack")def outer(func):
def inner(*args, *kwargs):
print("认证成功")
result = func(*args, **kwargs)
print("日志添加成功")
return result
return inner
@outer
def f1(name, age):
print("{}正在调用业务部门1的数据接口".format(name))
# 调用方法
f1("jack", 19) def outer1(func):
def inner(*args,**kwargs):
print("认证成功!")
result = func(*args,**kwargs)
print("日志添加成功")
return result
return inner
def outer2(func):
def inner(*args,**kwargs):
print("一条欢迎信息。。。")
result = func(*args,**kwargs)
print("一条欢送信息。。。")
return result
return inner
@outer1
@outer2
def f1(name,age):
print("%s 正在连接业务部门1数据接口......"%name)
# 调用方法
f1("jack",18) # 认证函数
def auth(request,kargs):
print("认证成功!")
# 日志函数
def log(request,kargs):
print("日志添加成功")
# 装饰器函数。接收两个参数,这两个参数应该是某个函数的名字。
def Filter(auth_func,log_func):
# 第一层封装,f1函数实际上被传递给了main_fuc这个参数
def outer(main_func):
# 第二层封装,auth和log函数的参数值被传递到了这里
def wrapper(request,kargs):
# 下面代码的判断逻辑不重要,重要的是参数的引用和返回值
before_result = auth(request,kargs)
if(before_result != None):
return before_result;
main_result = main_func(request,kargs)
if(main_result != None):
return main_result;
after_result = log(request,kargs)
if(after_result != None):
return after_result;
return wrapper
return outer
# 注意了,这里的装饰器函数有参数哦,它的意思是先执行filter函数。然后将filter函数的返回值作为装饰器函数的名字返回到这里。所以,Filter(auth,log) = outer , @Filter(auth,log) = @outer
@Filter(auth,log)
def f1(name,age):
print("%s 正在连接业务部门1数据接口......"%name)
# 调用方法
f1("jack",18)