装饰器
装饰器:定义一个函数,为其他函数添加额外功能
def index(x,y,z):
print(x,y,z)
def outter(func):
def wrapper(*args,**kwargs):
import time
start = time.time()
res = func(*args,**kwargs)
end = time.time()
return res
return wrapper
index = outter(index)
index(1,2,3)
开放封闭原则:拓展功能开放,修改源码封闭
语法糖:@timmer
def auth(func):
def wrapper(*args,**kwargs):
# 1、调用原函数
# 2、为其增加新功能
name=input('your name>>: ').strip()
pwd=input('your password>>: ').strip()
if name == 'egon' and pwd == '123':
res=func(*args,**kwargs)
return res
else:
print('账号密码错误')
return wrapper
@auth
def index():
print('from index')
index()
@func
把下面的函数名传入@后面的函数名加括号的里面的参数,然后将返回值赋值给下面的函数名
wrapper.__name__ = func.__name__
wrapper.__doc__ = func.__doc__
from functools import wraps
在wrapper定义上再加装饰器
@wraps(func)
wapper改了参数,那index调用的时候也得变,那就不符合要求了
有参装饰器:
from functools import wraps
def auth(x1,y1,z1):
def outter(func):
@wraps(func)
def wrapper(*args,**kwargs):
import time
start = time.time()
res = func(*args,**kwargs)
end = time.time()
print(x1,y1,z1)
return res
return wrapper
return outter
@auth(0,0,0)
def index(x,y,z):
print(x,y,z)
index(1,2,3)
print(index.__name__)
装饰器调用:
加载顺序:自下而上
最终index就是最外层的wrapper
执行顺序:从外层到内层
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现