当前位置: 首页 > news >正文

Iridescent:Day27

https://blog.csdn.net/weixin_45655710?type=blog@浙大疏锦行

DAY 27 函数专题2:装饰器
ps: 第一期day27对应5月16日
知识点回顾:
1.装饰器的思想:进一步复用
2.函数的装饰器写法
3.注意内部函数的返回值
作业:
编写一个装饰器logger,在函数执行前后打印日志信息(如函数名、参数、返回值)
1 @ logger
2 def multiply(a, b):
3 return a * b
4
5 multiply(2, 3)
6 #输出:
7 # 开始执行函数 multiply,参数:(2, 3) , { }
8 #函数multiply执行完毕,返回值:6

DAY 27:函数专题2——装饰器(Decorators)的学习。

装饰器是 Python 中一种非常高级且优雅的语法。它的核心思想是**“在不修改原函数代码的前提下,为函数添加额外的功能”**。这在机器学习项目中非常实用,比如你可以在不改变模型训练函数的情况下,通过装饰器自动记录训练时间、保存日志或检查显存。


💡 核心知识点回顾:装饰器的本质

装饰器本质上是一个闭包函数,它接收一个函数作为参数,并返回一个替换后的函数。

  1. 闭包结构:外部函数定义规则,内部函数(通常叫wrapper)负责具体执行。
  2. ***args**kwargs**:为了让装饰器通用,内部函数必须能接收任何形式的参数。
  3. 返回值传递:内部函数必须获取原函数的执行结果并return,否则原函数的返回值会“丢失”。

🎯 作业:编写logger装饰器

根据你的要求,我们需要在函数执行前获取函数名和参数,在执行后获取返回值。

代码实现:
importfunctoolsdeflogger(func):""" 日志装饰器:记录函数的调用过程 """# 使用 @functools.wraps 是一个良好的习惯# 它能保留原函数的元数据(如函数名、文档字符串)@functools.wraps(func)defwrapper(*args,**kwargs):# 1. 函数执行前的操作# func.__name__ 获取函数名print(f"开始执行函数{func.__name__}, 参数:{args},{kwargs}")# 2. 执行原函数result=func(*args,**kwargs)# 3. 函数执行后的操作print(f"函数{func.__name__}执行完毕,返回值:{result}")# 4. 返回原函数的执行结果returnresultreturnwrapper# --- 测试代码 ---@loggerdefmultiply(a,b):returna*b# 调用函数multiply(2,3)

✍️ 作业梳理与深度解析

为了帮你彻底掌握这个逻辑,我们拆解一下代码的执行细节:

1. 为什么使用*args**kwargs

如果你的multiply以后改成了接收三个参数,或者你把装饰器用在了一个只有关键字参数的函数上,*args(元组)和**kwargs(字典)能保证装饰器依然有效,这就是“通用性”。

2. 返回值的重要性

wrapper内部,我们用result = func(*args, **kwargs)拿到了2 * 3 = 6。如果最后没有return result,那么当你运行val = multiply(2, 3)时,val会变成None

3. 机器学习中的实际应用

想象一下,如果你在做加州房价预测的流程,你可以写一个@timer装饰器:

importtimedeftimer(func):defwrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)print(f"耗时:{time.time()-start:.4f}s")returnresreturnwrapper@timerdeftrain_random_forest(X,y):# 这里放你之前的随机森林训练代码pass

这样你就能在不污染训练代码逻辑的情况下,监控每一轮训练的时长了。

http://www.cnnetsun.cn/news/112417.html

相关文章:

  • camera calibration(相机校准)
  • JD-GUI 完全指南:Java 反编译工具的终极使用手册
  • 当模型预测控制遇上方向盘烫手时刻
  • ASMR音频下载完整指南:跨平台工具使用详解
  • 超越异步:如何在Node.js中构建极速数据库应用?
  • Boltz生物分子交互建模:从新手到专家的5个关键步骤
  • HoYo.Gacha专业抽卡分析工具完全使用手册
  • FastMCP高级特性之Composition
  • 安卓手机投屏到电脑的开源软件(scrcpy)
  • 边缘计算开源项目终极指南:让物联网设备秒变智能终端
  • ForensicsTool取证工具完整安装配置指南:快速掌握电子数据取证技能
  • DeepSeek-V3 KV缓存技术:让AI对话像翻书一样流畅
  • SpringBoot进阶教程(八十八)获取图片的宽高
  • PeachPie 1.1.13 发布支持最新PHP 8.5.0
  • 电视也可以玩街机经典游戏,你的客厅,早就该变成这样了!
  • 掌握3个Mock工具,轻松玩转单元测试
  • AutoGen到Microsoft Agent Framework终极迁移指南:从零开始构建现代化AI代理系统
  • 2008-2024年地级市女性奥运冠军数据
  • 2003-2024年上市公司人工智能采纳程度数据+Stata代码
  • 问了 3 个博士,导师不说,但目前最新论文卡人的已经不是知网查重
  • CST设计:可重构超表面宽带窄带可切换吸收与多波束技术
  • ai智能搜索文献:高效精准的学术资源检索新工具与应用研究
  • 英文文献的高效检索与阅读策略研究
  • 万字长文!Agent及其主流框架终极指南(附对比图),好Agent的标准:自己想、自己干、自己复盘!
  • 打造专属问答社区,开源系统助力内容创业新风口
  • Apache Impala为啥TBDS、华为MRS弃用?为什么不能做到无缝切换平缓迁移
  • 从开发到上线:智能Agent的Docker部署全链路实践(含YAML模板)
  • 智能连接与自动化引擎的全能表单系统,重新定义数据收集与业务流程的协同
  • 如何彻底解决企业级数据流程编排难题:Apache DolphinScheduler完整指南
  • 深度学习框架生态竞争格局:从Stable Diffusion WebUI Forge看技术选型逻辑