Python 官方文档:入门教程 => 点击学习
一.装饰器 1.定义:从字面上理解,就是装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出。装饰器有很多种,有函数的装饰器,也有类的装饰器。装饰器在很多语言中的名字也不尽相同,它
@dec
def func(): # 被装饰对象
pass
def 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)
--结束END--
本文标题: Python3中的装饰器
本文链接: https://www.lsjlt.com/news/185686.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0