news 2026/1/27 19:43:14

Iridescent:Day27

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/25 4:05:54

48、探索高级 Shell 脚本功能与趣味消息脚本

探索高级 Shell 脚本功能与趣味消息脚本 1. 高级 Shell 脚本功能概述 在编写 Shell 脚本时,有一些高级功能能极大地提升脚本的实用性和效率。下面将为大家介绍几种常见的高级功能及其使用方法。 1.1 使用 MySQL 存储持久数据 若要为应用程序存储持久数据,可借助 MySQL 服…

作者头像 李华
网站建设 2026/1/27 8:47:18

Sapiens系统稳定性保障:深度解析故障恢复与可靠性设计

Sapiens系统稳定性保障:深度解析故障恢复与可靠性设计 【免费下载链接】sapiens High-resolution models for human tasks. 项目地址: https://gitcode.com/gh_mirrors/sa/sapiens Sapiens作为基于3亿张真实世界人类图像预训练的高分辨率视觉模型&#xff0c…

作者头像 李华
网站建设 2026/1/27 15:31:36

51、Linux环境变量与数据处理工具:sed和gawk详解

Linux环境变量与数据处理工具:sed和gawk详解 1. 评估环境变量 在Linux系统中,bash shell使用了许多环境变量。虽然环境变量本身不是命令,但它们常常会影响shell命令的操作方式,因此了解这些环境变量非常重要。以下是bash shell中一些默认的环境变量及其描述: 变量 描述…

作者头像 李华
网站建设 2026/1/18 9:56:26

如何快速创建全自动Ubuntu安装ISO:终极无人值守部署工具详解

如何快速创建全自动Ubuntu安装ISO:终极无人值守部署工具详解 【免费下载链接】ubuntu-autoinstall-generator Generate a fully-automated Ubuntu ISO for unattended installations. 项目地址: https://gitcode.com/gh_mirrors/ub/ubuntu-autoinstall-generator …

作者头像 李华
网站建设 2026/1/25 1:29:38

微服务架构全景测试策略与落地实践

1 微服务测试概述与挑战分析 1.1 微服务架构特征对测试的影响 微服务架构通过将单体应用拆分为松散耦合的精细服务,显著提升了系统的可扩展性与技术多样性,但同时也为测试工作带来了前所未有的复杂性。服务间依赖网状化导致测试环境搭建困难&#xff0…

作者头像 李华
网站建设 2026/1/25 22:39:36

免费股票API接口全面指南

在数字经济时代,股票数据API接口已成为金融科技创新的核心驱动力。本文将带您深入了解如何通过这些接口获取有价值的市场数据,并构建智能化的投资分析系统。 现代股票API接口提供三大类数据服务: 实时行情数据 最新报价与成交数据 买卖五…

作者头像 李华