Python:(一)变量、类型与 f-string —— 数据的载体

目录

[1. 变量 (Variables):给数据贴标签](#1. 变量 (Variables):给数据贴标签)

[命名规范(ML 领域的潜规则)](#命名规范(ML 领域的潜规则))

[2. 四大核心数据类型 (The Core Types)](#2. 四大核心数据类型 (The Core Types))

[A. Float (浮点数) ------ ML 的绝对主角](#A. Float (浮点数) —— ML 的绝对主角)

[B. Int (整数) ------ 计数器](#B. Int (整数) —— 计数器)

[C. Bool (布尔值) ------ 逻辑开关](#C. Bool (布尔值) —— 逻辑开关)

[D. String (字符串) ------ 文本与路径](#D. String (字符串) —— 文本与路径)

必须要会的技能:类型转换 (Casting)

[3. f-string:格式化输出神器](#3. f-string:格式化输出神器)

基础用法

进阶用法:控制数字精度 (ML 必学)

[4. 实战演练:模拟训练日志](#4. 实战演练:模拟训练日志)

课后思考 (Check Your Understanding)


1. 变量 (Variables):给数据贴标签

在 Python 中,变量不需要"声明类型"(不像 C++ 或 Java 需要写 int a = 1)。你直接赋值,Python 会自动识别。

命名规范(ML 领域的潜规则)

虽然 Python 推荐用全小写加下划线(如 my_variable),但在机器学习的数学公式实现中,我们经常打破这个规则以匹配数学符号:

  • 常规变量: learning_rate, batch_size, model_path (使用 snake_case)

  • 矩阵/数据集: X (通常大写,代表特征矩阵), y (通常小写,代表标签)

  • 参数: w (权重 weights), b (偏置 bias)

python 复制代码
# 定义变量非常简单,左边是名字,右边是值
epoch = 10              # 训练轮数
learning_rate = 0.001   # 学习率
is_training = True      # 是否正在训练
model_name = "ResNet50" # 模型名称

# 变量的值是可以随时修改的
epoch = epoch + 1       # 现在 epoch 变成了 11

2. 四大核心数据类型 (The Core Types)

Python 有很多类型,但做算法模型时,你 95% 的时间只在和下面这四种打交道。

A. Float (浮点数) ------ ML 的绝对主角

机器学习的核心是微积分和矩阵运算,结果几乎永远是小数。

  • 场景: 模型的准确率 (0.985)、损失函数值 (0.0023)、权重参数。

  • 注意: 哪怕是 1.0,在计算机眼里它也是浮点数,而不是整数。

B. Int (整数) ------ 计数器

  • 场景: 数据集的索引(第 5 张图)、训练的轮数(第 10 轮)、分类的类别 ID(0 代表猫,1 代表狗)。

C. Bool (布尔值) ------ 逻辑开关

只有两个值:TrueFalse(注意首字母大写)。

  • 场景: shuffle=True (打乱数据), use_gpu=False (使用 CPU), pretrained=True (使用预训练模型)。

D. String (字符串) ------ 文本与路径

用单引号 ' ' 或双引号 " " 包裹。

  • 场景: 文件路径 './data/train.csv',自然语言处理中的原始文本 'I love AI'

必须要会的技能:类型转换 (Casting)

数据读入时经常格式不对(比如从文本文件读入的数字默认是字符串),你需要手动转换。

python 复制代码
s = "3.14159"
# print(s + 1)  # ❌ 报错!字符串不能和数字相加

f = float(s)    # ✅ 强制转换为浮点数
print(f + 1)    # 输出: 4.14159

i = int(3.9)    # ✅ 浮点转整数(注意:是直接截断,不是四舍五入)
print(i)        # 输出: 3

3. f-string:格式化输出神器

在训练神经网络时,你经常盯着屏幕看滚动的日志。如果打印得乱七八糟,会非常影响判断。

Python 3.6 引入的 f-string (formatted string literal) 是目前最推荐的写法。

基础用法

在字符串的引号前加一个 f,然后在字符串内部用花括号 {} 包裹变量。

python 复制代码
acc = 0.85
name = "YOLOv5"

# 老式写法 (不推荐,容易眼花)
print("模型 " + name + " 的准确率是 " + str(acc))

# ✅ f-string 写法 (推荐)
print(f"模型 {name} 的准确率是 {acc}")

进阶用法:控制数字精度 (ML 必学)

损失函数(Loss)通常是很长的小数,如 0.1293847192。直接打印太乱,我们通常只看前4位或前6位。

  • 语法: {变量:格式}

  • .4f:表示保留小数点后 4 位浮点数。

  • .2%:表示显示为百分比,保留 2 位小数。

python 复制代码
loss = 0.1293847192
accuracy = 0.98765432

# 这里的 :.4f 和 :.2% 是重点
print(f"Loss: {loss:.4f}")       # 输出: Loss: 0.1294 (自动四舍五入)
print(f"Accuracy: {accuracy:.2%}") # 输出: Accuracy: 98.77%

4. 实战演练:模拟训练日志

让我们把上面学到的组合起来,写一段模拟神经网络训练过程的代码。

python 复制代码
# === 模拟训练参数配置 ===
model_name = "DeepLabV3"
batch_size = 32         # int
total_images = 1000     # int
current_loss = 0.052391 # float

# 计算一下大概需要多少个 batch 才能跑完 (简单的数学运算)
# total_images / batch_size 结果是 float,我们需要转成 int
steps_per_epoch = int(total_images / batch_size) 

# === 打印训练日志 ===
print("-" * 30) # 打印30个减号作为分割线
print(f"开始训练模型: {model_name}")
print(f"总图片数: {total_images}, 批次大小: {batch_size}")
print(f"每轮需要跑 {steps_per_epoch} 步")
print("-" * 30)

# 模拟打印某一步的结果
step = 15
print(f"Step [{step}/{steps_per_epoch}] -> Loss: {current_loss:.4f}")

运行结果:

复制代码
------------------------------
开始训练模型: DeepLabV3
总图片数: 1000, 批次大小: 32
每轮需要跑 31 步
------------------------------
Step [15/31] -> Loss: 0.0524

课后思考 (Check Your Understanding)

请在你的 Python 环境(Jupyter Notebook 或 PyCharm)中尝试解决这个问题:

问题:

假设你有两个变量:

precision = 0.81234

recall = 0.78912

请计算 F1-Score(公式如下),并使用 f-string 打印结果,要求保留 3 位小数

(如果你写完了或者卡住了,可以随时把代码发给我,我来帮你 Review!)

相关推荐
清水白石0081 小时前
突破并行瓶颈:Python 多进程开销全解析与 IPC 优化实战
开发语言·网络·python
百锦再3 小时前
Java之Volatile 关键字全方位解析:从底层原理到最佳实践
java·开发语言·spring boot·struts·kafka·tomcat·maven
Lupino3 小时前
IoT 平台可编程化:基于 Pydantic Monty 构建工业级智能自动化链路
python
daad7773 小时前
rcu 内核线程
java·开发语言
xzjiang_3653 小时前
检查是否安装了MinGW 编译器
开发语言·qt·visual studio code
百锦再4 小时前
Java JUC并发编程全面解析:从原理到实战
java·开发语言·spring boot·struts·kafka·tomcat·maven
清水白石0084 小时前
突破性能瓶颈:深度解析 Numba 如何让 Python 飙到 C 语言的速度
开发语言·python
Eternity∞4 小时前
Linux系统下,C语言基础
linux·c语言·开发语言
yunhuibin5 小时前
AlexNet网络学习
人工智能·python·深度学习·神经网络
wangluoqi5 小时前
c++ 树上问题 小总结
开发语言·c++