有空间与域名 怎么做网站,软件开发文档的需求分析,压铸东莞网站建设,网站建设有几块浙大疏锦行
#x1f4d8; Day 26 实战作业#xff1a;从“调包”到“造轮子” —— 函数专题 (上)
1. 作业综述
核心目标#xff1a; 从今天开始#xff0c;我们将不再满足于调用 print(), len() 或 pandas.read_csv()#xff0c;而是开始编写属于自己的自定义函数。 这…浙大疏锦行 Day 26 实战作业从“调包”到“造轮子” —— 函数专题 (上)1. 作业综述核心目标从今天开始我们将不再满足于调用print(),len()或pandas.read_csv()而是开始编写属于自己的自定义函数。这是构建大型项目如我们之前的 ResNet 或 信贷预测 Pipeline的基石。只有将复杂的逻辑封装成函数代码才能具备复用性 (Reusability)和可读性 (Readability)。涉及知识点函数定义:def关键字与文档字符串 (Docstring)。参数魔法: 位置参数、关键字参数、默认参数。无限接口:*args(可变位置参数) 与**kwargs(可变关键字参数) 的实战应用。步骤 1定义你的第一个工具场景描述在机器学习中我们经常需要计算各种指标如 Precision, Recall, F1。虽然sklearn有现成的但为了理解原理我们需要手写一个。任务编写一个函数calculate_f1(precision, recall)。要求包含清晰的文档字符串 (Docstring)说明参数和返回值。处理分母为 0 的情况防止除零报错返回 0。返回计算好的 F1 分数。defcalculate_f1(precision,recall): 计算 F1 Score 的自定义函数。 参数: precision (float): 精确率 recall (float): 召回率 返回: float: F1 Score。如果分母为0则返回 0.0。 # 1. 检查分母是否为 0if(precisionrecall)0:return0.0# 2. 计算公式: 2 * (P * R) / (P R)f12*(precision*recall)/(precisionrecall)returnf1# --- 测试你的工具 ---p0.85r0.76# 调用函数scorecalculate_f1(p,r)print(fPrecision:{p}, Recall:{r})print(fF1 Score:{score:.4f})# 测试极端情况print(f极端情况 F1:{calculate_f1(0,0)})Precision: 0.85, Recall: 0.76 F1 Score: 0.8025 极端情况 F1: 0.0步骤 2灵活的默认参数场景描述写代码时有些参数 90% 的情况都是固定的但我们希望保留修改它的权利。比如数据加载函数默认读取.csv但偶尔也需要读.txt。任务编写函数mock_data_loader(file_path, moder, file_typecsv)。如果file_type是 ‘csv’打印 “正在解析表格…”如果是 ‘json’打印 “正在解析字典…”。分别使用默认参数和修改参数的方式调用它。defmock_data_loader(file_path,moder,file_typecsv): 模拟数据加载器。 参数: file_path (str): 文件路径 mode (str): 打开模式默认为 r (只读) file_type (str): 文件类型默认为 csv print(f\n 正在打开文件:{file_path}(模式:{mode}))iffile_typecsv:print( 正在解析 CSV 表格数据...)eliffile_typejson:print( 正在解析 JSON 结构化数据...)else:print(f ⚠️ 未知文件类型:{file_type})print( ✅ 加载完成)# --- 调用测试 ---# 1. 最简单的调用 (使用全部默认值)mock_data_loader(train_data.csv)# 2. 修改部分默认值 (关键字传参)mock_data_loader(config.json,file_typejson)# 3. 全部自定义mock_data_loader(log.txt,modew,file_typetext) 正在打开文件: train_data.csv (模式: r) 正在解析 CSV 表格数据... ✅ 加载完成 正在打开文件: config.json (模式: r) 正在解析 JSON 结构化数据... ✅ 加载完成 正在打开文件: log.txt (模式: w) ⚠️ 未知文件类型: text ✅ 加载完成步骤 3万能接口*args与**kwargs场景描述这是 Python 高级编程中最帅气的特性在 PyTorch 和 Transformers 源码中随处可见。*args: 用于接收任意数量的无名参数打包成元组。**kwargs: 用于接收任意数量的键值对参数打包成字典。任务编写一个“超级模型训练器”train_model(model_name, *metrics, **config)model_name: 必填参数。*metrics: 接收任意数量的评估指标如 “Accuracy”, “F1”, “AUC”。**config: 接收任意数量的超参数如 lr0.01, batch_size32。deftrain_model(model_name,*metrics,**config):print(f\n 开始训练模型: 【{model_name}】)# 1. 处理 *args (metrics)ifmetrics:print( 需要计算的指标:)forminmetrics:print(f -{m})else:print(⚠️ 未指定评估指标)# 2. 处理 **kwargs (config)print(⚙️ 训练配置 (Hyperparameters):)forkey,valueinconfig.items():print(f{key}:{value})print(... 模型训练中 ...)print(✅ 训练结束)# --- 实战调用 ---# 场景 A: 简单训练train_model(LogisticRegression,Accuracy,lr0.1)# 场景 B: 复杂深度学习训练# 注意看我可以传 2 个指标也可以传 10 个配置函数都能接得住train_model(ResNet50,Accuracy,Precision,Recall,F1_Score,# *metricsbatch_size64,# **configlearning_rate0.001,optimizerAdam,devicecuda:0) 开始训练模型: 【LogisticRegression】 需要计算的指标: - Accuracy ⚙️ 训练配置 (Hyperparameters): lr: 0.1 ... 模型训练中 ... ✅ 训练结束 开始训练模型: 【ResNet50】 需要计算的指标: - Accuracy - Precision - Recall - F1_Score ⚙️ 训练配置 (Hyperparameters): batch_size: 64 learning_rate: 0.001 optimizer: Adam device: cuda:0 ... 模型训练中 ... ✅ 训练结束 Day 26 总结掌控代码的控制权今天我们完成了一次身份的转变封装思维通过def我们将一堆代码打包成了一个function。以后遇到计算 F1 Score直接调用即可这就是DRY 原则 (Don’t Repeat Yourself)。接口设计默认参数让函数好用大部分时候不用传参。*args/**kwargs让函数强大想传多少传多少。深度学习伏笔你今天写的train_model(name, *args, **kwargs)其实就是 PyTorch 中模型定义和训练循环的雏形。在后续的大型项目中这种写法能让你的代码极具扩展性。Next Level: 下一次我们将探索函数的高阶玩法Lambda, Map, Filter让数据处理效率翻倍