在人工智能与深度学习的世界里,Python 是最核心的编程语言。无论是搭建神经网络、训练模型,还是进行数据处理,Python 都无处不在。

        这一篇,我们从 Python 基础语法 入手,结合深度学习应用场景,系统学习变量、函数和类的用法。

        若想要更详细的Python相关知识,请到作者Python3教程专栏进行学习。本篇博客仅补充和机械学习相关的Python内容,适合有编程语言基础的读者进行Python入手。

        Python3教程专栏地址:

https://blog.csdn.net/theodore_1022/category_12954117.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12954117&sharerefer=PC&sharesource=Theodore_1022&sharefrom=from_linkhttps://blog.csdn.net/theodore_1022/category_12954117.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12954117&sharerefer=PC&sharesource=Theodore_1022&sharefrom=from_link


零、引入

        在深度学习实践中,几乎所有流程都离不开 Python:

  • 变量:保存超参数、路径、训练结果;

  • 数据类型:存放图像、标签、批量数据;

  • 判断与循环:控制训练逻辑;

  • 函数:封装计算逻辑(如损失函数);

  • 类:构建神经网络或训练器。

        掌握这些内容,不仅能让你写出简洁高效的代码,也能帮你更快理解 PyTorch、TensorFlow 等深度学习框架。


一、变量类型与输出语句

1.1 编程基础

Python 是一门动态类型语言:

  • 不需要声明类型:a = 1 就能直接使用;

  • 注释用 #;

  • 使用缩进来区分代码块(不能随便加空格)。

1.2 变量类型

在深度学习中,我们常见的变量类型有:

  • 字符串:保存数据集路径或模型名称;

  • 数字:学习率、准确率、批量大小;

  • 布尔值:是否使用 GPU;

  • 集合、元组、列表、字典:用于存储数据或超参数配置。

1.3 输出语句

在调试模型时,我们常用 print() 打印结果:

epochs = 10
lr = 0.001
print(f"训练轮数: {epochs}, 学习率: {lr}")

讲解:
        这里用 f 字符串 格式化输出,把变量直接嵌入到字符串里,非常适合打印训练日志。


二、基本变量类型

2.1 字符串

字符串通常用于文件路径或标签:

dataset = "MNIST" 
path = "/data/mnist/train" 
print(f"数据集: {dataset}, 路径: {path}")

讲解:
        训练模型时经常要指定数据集路径,比如 ImageNet 的目录。字符串让我们方便地保存和拼接这些路径。


2.2 数字

数字类型在深度学习里无处不在:

batch_size = 64      # 整数
accuracy = 0.95      # 浮点数

print("批量大小:", batch_size)
print("模型准确率:", accuracy)

讲解:
        整数常用于批量大小、轮数;浮点数用于学习率、损失、准确率等。


2.3 布尔型

布尔值在训练流程中常用来控制条件:

use_gpu = True

if use_gpu:
    print("使用 GPU 加速训练")
else:
    print("使用 CPU 训练")

讲解:
        比如 torch.cuda.is_available() 返回布尔值,用来判断能否启用 GPU。


2.4 判断语句

lr = 0.001

if lr > 0.01:
    print("学习率过大,可能震荡")
elif lr < 1e-5:
    print("学习率过小,可能收敛太慢")
else:
    print("学习率合适")

讲解:
        训练神经网络时,学习率是最重要的超参数之一,过大过小都会影响模型效果。


2.5 基本变量间的转换

str_lr = str(lr)         # 数字 → 字符串
int_flag = int(True)     # 布尔 → 整数
float_val = float("3.14")# 字符串 → 浮点数

讲解:
        数据加载时,很多库返回的可能是字符串,需要转换成数值类型才能计算。


三、高级变量类型

3.1 集合

集合用于存放不重复的标签:

labels = {"cat", "dog", "cat", "fish"}
print(labels)  # {'dog', 'cat', 'fish'}

讲解:
        集合自动去重,可以用来统计数据集中不同的类别。


3.2 元组

元组适合存放不可变的超参数配置:

config = ("Adam", 0.001, 32)  # (优化器, 学习率, 批量大小)
print(config)

讲解:
        元组的值不可修改,适合存放固定不变的参数。


3.3 列表

列表常用于存放训练结果:

losses = [0.9, 0.7, 0.5, 0.3]
print("首轮 loss:", losses[0])
print("最后一轮 loss:", losses[-1])

讲解:
        我们经常用列表保存训练过程中每一轮的 loss 或 accuracy。


3.4 字典

字典是最常见的配置管理方式:

params = {
    "optimizer": "Adam",
    "lr": 0.001,
    "batch_size": 64
}
print(params["optimizer"])

讲解:
        在深度学习项目中,训练配置通常用字典存储,方便管理和传参。


3.5 循环语句

训练过程就是循环:

epochs = 5
for epoch in range(1, epochs+1):
    print(f"第 {epoch} 轮训练中...")

讲解:
        这就是最简单的训练循环雏形。


3.6 列表推导式

squared = [i**2 for i in range(5)]
print(squared)  # [0, 1, 4, 9, 16]

讲解:
        列表推导式能让你快速生成批量数据,非常适合数据预处理。


3.7 高级变量间的转换

param_list = [("lr", 0.001), ("batch_size", 32)]
param_dict = dict(param_list)
print(param_dict)

讲解:
        不同库之间数据结构不一样时,经常需要转换,字典和列表互转非常常见。


四、函数

4.1 吞吐各个类型的变量

def show_info(v):
    return f"信息: {v}"

print(show_info("MNIST 数据集"))

讲解:
        函数能让代码更模块化,比如封装日志打印。


4.2 吞吐多个变量

def metrics(tp, fp, fn):
    precision = tp / (tp + fp)
    recall = tp / (tp + fn)
    return precision, recall

p, r = metrics(80, 10, 20)
print(f"精确率: {p:.2f}, 召回率: {r:.2f}")

讲解:
        这是分类任务中常用的指标函数。


4.3 函数的关键字调用

def train(model, dataset, epochs):
    print(f"训练 {model} 在 {dataset}, 共 {epochs} 轮")

train(dataset="CIFAR-10", model="CNN", epochs=10)

讲解:
        关键字调用让函数参数更清晰,常用于训练接口。


4.4 输入参数的默认值

def build_model(name="MLP", layers=3):
    print(f"构建 {name} 模型, 包含 {layers} 层")
    
build_model()
build_model("CNN", 5)

讲解:
        默认值让函数更灵活,比如模型构建时可指定或不指定参数。


五、类

5.1 创建和使用类

class Model:
    def __init__(self, name, layers):
        self.name = name
        self.layers = layers
    
    def summary(self):
        print(f"模型: {self.name}, 层数: {self.layers}")

m = Model("CNN", 5)
m.summary()

讲解:
        类是深度学习框架的核心思想,一个模型就是一个类。


5.2 属性的默认值

class Dataset:
    def __init__(self, name, size, task="分类"):
        self.name = name
        self.size = size
        self.task = task

data = Dataset("MNIST", 60000)
print(data.task)  # 分类

讲解:
        默认值让类更易用,避免每次都重复传参。


5.3 继承

class Optimizer:
    def __init__(self, lr):
        self.lr = lr

class Adam(Optimizer):
    def __init__(self, lr, beta1=0.9):
        super().__init__(lr)
        self.beta1 = beta1

opt = Adam(0.001)
print(opt.lr, opt.beta1)

讲解:
        继承让我们在已有优化器的基础上扩展功能。


5.4 掠夺(组合)

class Loss:
    def mse(self, y_true, y_pred):
        return sum((t - p) ** 2 for t, p in zip(y_true, y_pred)) / len(y_true)

class Trainer:
    def __init__(self):
        self.loss_fn = Loss()  # 组合 Loss 类

    def train_step(self, y_true, y_pred):
        return self.loss_fn.mse(y_true, y_pred)

trainer = Trainer()
print(trainer.train_step([1,0,1], [0.8,0.1,0.9]))

讲解:
        组合(掠夺)比继承更灵活,一个训练器可以组合多个不同的组件。


总结

本文我们完整学习了:

  • Python 的基础语法(变量、输出、判断、循环);

  • 高级数据结构(列表、字典、集合、元组);

  • 函数与类的封装思想;

  • 结合深度学习的应用场景(超参数、训练循环、模型定义)。

理解这些内容后,你就能更快上手 NumPy / Pandas / PyTorch 等深度学习工具

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐