Python 30 分钟速通:AI 开发用到的语法就够了
2026/7/14 20:34:54 网站建设 项目流程

本文专为 AI/机器学习新手打造——不教你做网站,不教你写爬虫,只讲 NumPy、Pandas、PyTorch 中高频出现的 Python 语法。看完就能读懂 AI 代码,写完就能跑实验。


目录

  • 前言:学 Python 不是为了当全栈,是为了跑 AI
  • 第一章:变量、类型与运算符(5 分钟)
  • 第二章:列表、元组、字典——AI 中的三大容器(7 分钟)
  • 第三章:条件、循环与推导式(5 分钟)
  • 第四章:函数、Lambda 与作用域(5 分钟)
  • 第五章:类与面向对象——理解 nn.Module 的前提(4 分钟)
  • 第六章:文件读写与路径操作(2 分钟)
  • 第七章:类型注解——你以后每行代码都会用到(2 分钟)
  • 总结:一张语法速查表

前言:学 Python 不是为了当全栈,是为了跑 AI

一个浪费你时间的真相:大多数 Python 入门课都在教你写 2048 小游戏、爬豆瓣电影、做 Flask 博客。这些当然有价值——但对 AI 开发来说,80% 的内容你用不上。

AI 开发真正需要的 Python 语法,其实少得惊人

  • NumPy 操作矩阵 → 需要列表、切片、索引
  • PyTorch 定义模型 → 需要类继承、__init__forward()
  • DataLoader 加载数据 → 需要yield__getitem__
  • 训练循环 → 需要 for 循环、条件判断
  • 画 loss 曲线 → 需要列表、matplotlib 调用

本文的设计原则

  1. 只讲 AI 中用到的,不讲多余内容
  2. 每个知识点都对应一个真实的 AI 场景,让你知道"这个语法在 AI 中怎么用"
  3. 代码都可直接复制运行,无需安装任何 AI 库
  4. 读完就能读懂 PyTorch 官方教程和 GitHub 上的 AI 项目代码

环境准备:安装 Python 3.10+,打开终端输入python进入交互模式,或者用 VS Code / Jupyter Notebook 跟着敲。


第一章:变量、类型与运算符(5 分钟)

1.1 变量与基本类型

Python 是动态类型语言,不需要声明类型,但理解类型至关重要。

# ========== 数字 ========== epochs = 100 # int——训练轮数 learning_rate = 0.001 # float——学习率 batch_size = 32 # int——批大小 # ========== 字符串 ========== model_name = "ResNet-50" dataset_path = r"C:\data\images" # 原始字符串,Windows 路径必备 log_msg = f"Epoch {epochs}, lr={learning_rate}" # f-string,日志必备 # ========== 布尔 ========== use_gpu = True training_complete = False # ========== None ========== best_accuracy = None # 常用于初始化"暂无最佳结果"

AI 场景lr,epochs,batch_size这三个变量会出现在 100% 的 AI 训练脚本里。

1.2 常用运算符

# 算术 total = 32 * 100 # batch_size * epochs = 3200 # 比较——输出布尔值 if accuracy > 0.95: print("模型已达到目标精度") # 整除和取余——用于数据分片 samples = 105 batch_size = 32 n_batches = samples // batch_size # 3(整除,105÷32=3 余 9) remainder = samples % batch_size # 9(余数) # in 运算符——检查元素是否存在 allowed_models = ["ResNet", "VGG", "EfficientNet"] if "ResNet" in allowed_models: print("可以使用此模型") # is vs == a = None if a is None: # ✅ 判断 None 用 is,不要用 == print("未赋值")

1.3 Python 的"假"值

if判断中,以下值被视为False

# 以下全部为 False bool(0) bool(0.0) bool("") # 空字符串 bool([]) # 空列表 bool({}) # 空字典 bool(None) # AI 中的经典用法:检查列表是否为空 predictions = [] if not predictions: # 等价于 if len(predictions) == 0 print("还没有预测结果")

第二章:列表、元组、字典——AI 中的三大容器(7 分钟)

2.1 列表(List)——最常用的数据结构

# 创建列表 metrics = ["accuracy", "precision", "recall", "f1"] layer_sizes = [784, 128, 64, 10] # 输入784 → 隐层128 → 隐层64 → 输出10 loss_history = [] # 空列表,训练中动态添加 loss # 索引——从 0 开始 first_layer = layer_sizes[0] # 784 last_layer = layer_sizes[-1] # 10(负数索引从末尾开始) # 切片——AI 代码中最高频操作 train_data = list(range(1000)) # [0, 1, 2, ..., 999] train_80 = train_data[:800] # 前 800 个,切片 [0:800] val_20 = train_data[800:] # 后 200 个,切片 [800:] batch_1 = train_data[0:32] # 第一个 batch:[0, 1, ..., 31] batch_2 = train_data[32:64] # 第二个 batch:[32, 33, ..., 63] # 切片三参数 [start:end:step] every_other = train_data[::2] # 隔一个取一个 reversed_data = train_data[::-1] # 倒序 # 列表操作 loss_history.append(0.56) # 在末尾添加 loss_history.append(0.43) last_loss = loss_history.pop() # 弹出最后一个 0.43 # 列表拼接 all_classes = ["cat"] + ["dog"] + ["bird"] # ["cat", "dog", "bird"]

AI 场景train_data[:800]是手动划分训练集/验证集的经典写法;append()在每个 epoch 结束时记录 loss;[::-1]在序列数据倒序时有奇效。

2.2 多维列表(模拟矩阵)

# 3×3 矩阵——在学 NumPy 之前先用列表理解 matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] # 访问元素 element = matrix[1][2] # 第 2 行,第 3 列 → 6 # 提取某一列(列表推导式,第三章讲) col_1 = [row[0] for row in matrix] # [1, 4, 7]

2.3 元组(Tuple)——不可变的列表

# 创建——用逗号或括号 image_shape = (224, 224) # 图像尺寸 H×W color_rgb = (255, 0, 0) # RGB 颜色 model_output = (prob, class_id) # 同时返回概率和类别 # 解包(unpacking)——AI 代码中的高频模式 height, width = image_shape # height=224, width=224 prob, class_id = model_output # 同时赋值给两个变量 # 函数返回多值时本质是返回元组 def predict(image): return 0.95, 3 # 返回 (prob, class_id) confidence, predicted_class = predict(img) # 解包接收

AI 场景(3, 224, 224)是典型的 RGB 图像张量形状;nn.Sequential的参数就是各层组成的元组;DataLoader 的batch_size等参数常以元组传递。

2.4 字典(Dict)——键值对的容器

# 创建——AI 配置文件的天然载体 config = { "model": "ResNet-18", "epochs": 100, "batch_size": 32, "learning_rate": 0.001, "optimizer": "Adam", "use_gpu": True } # 访问 print(config["model"]) # "ResNet-18" print(config.get("dropout", 0.5)) # 如果 key 不存在,返回默认值 0.5 # 修改和添加 config["epochs"] = 200 # 修改 config["weight_decay"] = 1e-4 # 新增 # 遍历 for key, value in config.items(): print(f"{key}: {value}") # AI 中超参数搜索的经典模式 hyperparams = {"lr": 0.001, "bs": 32, "layers": 3} for param_name, param_value in hyperparams.items(): print(f"正在测试 {param_name}={param_value}")

AI 场景:模型配置文件(model card、train_args)天然用字典存储;state_dict()保存模型权重时返回的就是字典;kwargs参数传递整个配置字典。


第三章:条件、循环与推导式(5 分钟)

3.1 if-elif-else 条件判断

# 基础 accuracy = 0.93 if accuracy >= 0.95: print("✅ 模型可以上线") elif accuracy >= 0.90: print("⚠️ 模型达标,建议继续优化") else: print("❌ 精度不足,需要重训") # 条件表达式(三目运算符) status = "合格" if accuracy >= 0.90 else "不合格"

AI 场景:早停(Early Stopping)的核心逻辑就是用if判断验证集 loss 是否不再下降。

3.2 for 循环——训练的核心

# 遍历列表 for epoch in range(1, 11): # 1 到 10 print(f"第 {epoch} 轮训练") # 同时遍历索引和值——enumerate models = ["CNN", "RNN", "Transformer"] for i, name in enumerate(models): print(f"模型 {i}: {name}") # 模型 0: CNN, 模型 1: RNN, ... # 同时遍历两个列表——zip(DataLoader 底层原理) losses = [0.8, 0.5, 0.3] accuracies = [0.6, 0.8, 0.9] for loss, acc in zip(losses, accuracies): print(f"Loss: {loss}, Acc: {acc}") # 提前结束训练 for epoch in range(100): loss = 0.01 / (epoch + 1) # 模拟 loss 下降 if loss < 0.001: print(f"第 {epoch} 轮,loss 已收敛,停止训练") break # 提前退出循环 # 跳过本轮,继续下一轮 for i, sample in enumerate(data): if sample is None: continue # 跳过无效样本 process(sample)

AI 场景:训练循环for epoch in range(epochs): for batch in dataloader:是每个 AI 项目的 DNA。enumeratezip是 DataLoader 内部实现的关键语法。

3.3 推导式——AI 代码中最 Pythonic 的写法

推导式是 Python 最优雅的特性之一,也是 AI 数据处理中最高频的单行代码模式。

# ========== 列表推导式(最常用) ========== # 基础:对每个元素做操作 import math values = [1.0, 4.0, 9.0, 16.0] sqrt_values = [math.sqrt(x) for x in values] # [1.0, 2.0, 3.0, 4.0] # 带 if 条件 scores = [0.45, 0.89, 0.63, 0.92, 0.38] high_scores = [s for s in scores if s > 0.8] # [0.89, 0.92] # 带 if-else 条件(注意语序不同) labels = ["合格" if s > 0.6 else "不合格" for s in scores] # ['不合格', '合格', '合格', '合格', '不合格'] # 嵌套循环展开 classes = ["猫", "狗"] colors = ["黑", "白"] combinations = [f"{c}{d}" for c in colors for d in classes] # ['黑猫', '黑狗', '白猫', '白狗'] # 数据预处理中的经典用法 import random augmented_data = [x + random.uniform(-0.1, 0.1) for x in train_data] # ========== 字典推导式 ========== class_names = {0: "cat", 1: "dog", 2: "bird"} # 键值反转 id_to_name = {v: k for k, v in class_names.items()} # {'cat': 0, 'dog': 1, 'bird': 2} # 从列表中构建统计字典 predictions = ["cat", "dog", "cat", "bird", "cat"] count = {cls: predictions.count(cls) for cls in set(predictions)} # {'cat': 3, 'dog': 1, 'bird': 1}

AI 场景:数据预处理(标准化、归一化)几乎全靠列表推导式;混淆矩阵统计、分类结果格式化也是推导式的天下。看不懂推导式 = 看不懂 50% 的 AI 数据预处理代码。


第四章:函数、Lambda 与作用域(5 分钟)

4.1 函数定义

# 基本函数 def compute_accuracy(predictions, targets): """计算分类准确率""" correct = sum(1 for p, t in zip(predictions, targets) if p == t) return correct / len(targets) result = compute_accuracy([1, 0, 2], [1, 1, 2]) # 0.6667 # 默认参数 def create_optimizer(name="Adam", lr=0.001, weight_decay=0.0): """创建优化器配置""" return {"name": name, "lr": lr, "weight_decay": weight_decay} opt1 = create_optimizer() # 全部使用默认值 opt2 = create_optimizer(name="SGD", lr=0.01) # 覆盖部分参数

AI 场景forward(),train_step(),validate()——一切 AI 逻辑都封装在函数中。

4.2*args**kwargs——AI 框架的万能参数

# *args——接收任意数量的位置参数 def print_layers(*layer_sizes): """打印网络各层大小""" for i, size in enumerate(layer_sizes): print(f"Layer {i}: {size}") print_layers(784, 256, 128, 10) # Layer 0: 784 # Layer 1: 256 # Layer 2: 128 # Layer 3: 10 # **kwargs——接收任意数量的关键字参数 def build_model(**kwargs): """构建模型配置""" name = kwargs.get("name", "Unknown") pretrained = kwargs.get("pretrained", False) print(f"模型: {name}, 预训练: {pretrained}") return kwargs config = build_model(name="ResNet-50", pretrained=True, num_classes=1000) # 解包字典传给函数——常见于传递训练参数 train_args = {"lr": 0.001, "epochs": 50, "batch_size": 32} def train(**kwargs): for k, v in kwargs.items(): print(f"{k} = {v}") train(**train_args) # 将字典展开为关键字参数

AI 场景:PyTorch 的nn.Module.__init__()大量使用**kwargs传递可变配置;DataLoader的参数本质上就是**kwargs展开。

4.3 Lambda 表达式——匿名函数

# 基础语法 square = lambda x: x * x print(square(5)) # 25 # 主要用在 sorted/map/filter 中 # 按准确率排序模型 models = [("CNN", 0.92), ("RNN", 0.85), ("Transformer", 0.96)] sorted_models = sorted(models, key=lambda m: m[1], reverse=True) # [('Transformer', 0.96), ('CNN', 0.92), ('RNN', 0.85)] # 过滤低置信度预测 probs = [0.23, 0.87, 0.45, 0.91] high_conf = list(filter(lambda x: x > 0.5, probs)) # [0.87, 0.91] # 数据转换(map) scaled = list(map(lambda x: x * 2, [1, 2, 3])) # [2, 4, 6]

AI 场景sorted(dataloader, key=lambda x: x[0].shape[1])按序列长度排序(NLP 中做 bucketing);自定义 DataLoader 排序规则。

4.4 作用域——变量的可见范围

# 全局变量 GLOBAL_SEED = 42 # 约定:全大写变量名表示常量 def set_seed(): local_var = 42 # 局部变量,函数外不可见 print(GLOBAL_SEED) # 可以读取全局变量 def update_global(): global GLOBAL_SEED GLOBAL_SEED = 999 # 修改全局变量必须先声明

AI 场景:随机种子RANDOM_SEED通常定义为全局常量;torch.no_grad()改变局部梯度行为,本质上是 Python 上下文管理器。


第五章:类与面向对象——理解nn.Module的前提(4 分钟)

5.1 为什么学类?

当你打开 PyTorch 官方教程,第一眼看到的就是:

class MyModel(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(3, 64, 3) def forward(self, x): return self.conv1(x)

如果你不直到class,__init__,self,super()是什么,这段代码就是天书。下面 3 分钟解决它。

5.2 类的定义、初始化与方法

class SimpleModel: """一个简单的模型基类模拟""" # __init__ = 构造函数,创建对象时自动调用 def __init__(self, input_dim, output_dim): self.input_dim = input_dim # self.xxx = 实例属性 self.output_dim = output_dim self.is_training = True # 默认训练模式 print(f"模型初始化: {input_dim} → {output_dim}") # 普通方法——第一个参数必须是 self def train(self): self.is_training = True print("切换到训练模式") def eval(self): self.is_training = False print("切换到评估模式") def forward(self, x): """模拟前向传播""" return f"处理输入 {x},输出维度 {self.output_dim}" # 使用 model = SimpleModel(784, 10) # 自动调用 __init__ # 输出:模型初始化: 784 → 10 model.train() result = model.forward([1, 2, 3]) print(result) # 处理输入 [1, 2, 3],输出维度 10

核心理解self就是"这个对象自己"。self.input_dim让你在类的任何方法中都能访问这个属性。

5.3 继承——AI 框架的基石

class BaseModel: def __init__(self, name): self.name = name def save(self): return f"{self.name} 已保存" # 继承——CNN 是 Model 的子类 class CNN(BaseModel): def __init__(self, name, num_layers): super().__init__(name) # 调用父类的 __init__ self.num_layers = num_layers # 子类新增属性 def forward(self, x): return f"CNN ({self.name}) 处理 {x},共 {self.num_layers} 层" cnn = CNN("MyCNN", 18) print(cnn.save()) # "MyCNN 已保存"——继承自 BaseModel print(cnn.forward("image")) # CNN 自己的方法

AI 场景class MyModel(nn.Module)就是继承;super().__init__()是标准写法,不能省略;自定义模型只需重写__init__forward

5.4 魔术方法——让对象"自带行为"

class Metrics: def __init__(self): self.data = [] # __len__:让 len(obj) 生效 def __len__(self): return len(self.data) # __getitem__:让 obj[i] 生效(DataLoader 的核心) def __getitem__(self, index): return self.data[index] # __str__:让 print(obj) 输出有意义的信息 def __str__(self): return f"Metrics({len(self)} items)" # __call__:让对象能像函数一样被调用 def __call__(self, x): self.data.append(x) return x m = Metrics() m(0.85) # __call__ 被调用 m(0.92) print(len(m)) # 2 —— __len__ 被调用 print(m[0]) # 0.85 —— __getitem__ 被调用 print(m) # Metrics(2 items) —— __str__ 被调用

AI 场景__getitem__是 PyTorchDataset子类必须实现的方法;__call__model(x)等价于model.forward(x)__len__len(dataset)返回数据集大小。


第六章:文件读写与路径操作(2 分钟)

6.1 读文件

# 读取整个文件 with open("config.yaml", "r", encoding="utf-8") as f: content = f.read() # 逐行读取——处理大型 CSV/JSONL 数据集 with open("train_data.jsonl", "r", encoding="utf-8") as f: for line in f: data = line.strip() # 去掉末尾换行符 if data: # 跳过空行 process(data) # 读取 CSV——初学用 csv 模块,进阶用 pandas(见下一篇) import csv with open("labels.csv", "r") as f: reader = csv.reader(f) header = next(reader) # 跳过表头 for row in reader: image_path, label = row[0], row[1]

6.2 写文件

# 写训练日志 with open("training_log.txt", "w", encoding="utf-8") as f: f.write("Epoch, Loss, Accuracy\n") for epoch in range(1, 6): loss = 1.0 / epoch acc = 1.0 - loss f.write(f"{epoch}, {loss:.4f}, {acc:.4f}\n")

6.3 路径操作

import os from pathlib import Path # 推荐用 pathlib,跨平台无痛 # 路径拼接——不要手动拼字符串! data_dir = Path("C:/projects/data") image_dir = data_dir / "images" / "train" # 用 / 拼接 label_file = data_dir / "labels.csv" # 检查路径 if image_dir.exists(): print(f"数据目录存在: {image_dir}") # 列出所有文件 image_files = list(image_dir.glob("*.jpg")) # 所有 jpg 图片 print(f"找到 {len(image_files)} 张图片") # 获取文件名和扩展名 for img_path in image_files: name = img_path.stem # 文件名(不含扩展名) ext = img_path.suffix # 扩展名 .jpg parent = img_path.parent # 所在目录

AI 场景Path是处理数据集的标配工具;glob("*.jpg")遍历图片文件夹是最常见的操作;/拼接路径告别 Windows/Linux 反斜杠问题。


第七章:类型注解——你以后每行代码都会用到(2 分钟)

7.1 为什么类型注解对 AI 开发至关重要

AI 代码中到处都是Tensor,ndarray,DataLoader……如果没有类型提示,你根本不知道一个函数的输入到底是什么形状。

from typing import List, Tuple, Optional, Dict, Union, Any # 基础类型注解 def compute_loss( predictions: List[float], # float 列表 targets: List[float], reduction: str = "mean" # 字符串,默认 "mean" ) -> float: # 返回 float """计算均方误差""" n = len(predictions) squared_errors = [(p - t) ** 2 for p, t in zip(predictions, targets)] if reduction == "mean": return sum(squared_errors) / n return sum(squared_errors) # 复杂类型——AI 代码标配 Config = Dict[str, Any] # 自定义类型别名 # Config = {"lr": 0.001, "epochs": 100, ...} def create_dataloader( data_dir: str, batch_size: int = 32, shuffle: bool = True ) -> Tuple[List, List]: """返回 (train_data, val_data) 元组""" pass # Optional——可能为 None def load_checkpoint(path: str) -> Optional[Dict]: """加载模型检查点,文件不存在时返回 None""" import os if not os.path.exists(path): return None return {"epoch": 10, "state_dict": {}} # Union——多种类型之一 def scale_input(x: Union[int, float, List[float]]) -> List[float]: """输入可以是单个数字或列表""" if isinstance(x, list): return [v * 2 for v in x] return [x * 2]

AI 场景:现代 AI 代码库(HuggingFace Transformers、PyTorch 官方示例)几乎 100% 使用类型注解。不写注解 = 维护的人(包括 3 个月后的你自己)会骂你。


总结:一张语法速查表

AI 开发核心 Python 语法对照

语法AI 中的典型场景出现频率
for epoch in range(N)训练循环⭐⭐⭐⭐⭐
for batch in dataloader批数据迭代⭐⭐⭐⭐⭐
list[i:j]切片划分训练集/验证集⭐⭐⭐⭐⭐
[f(x) for x in data if ...]数据预处理、过滤⭐⭐⭐⭐⭐
f"{name}_{epoch}"f-string日志、模型保存命名⭐⭐⭐⭐⭐
class Model(nn.Module)定义神经网络⭐⭐⭐⭐⭐
def forward(self, x)前向传播⭐⭐⭐⭐⭐
dict[key]/.get(key, default)模型配置、超参存储⭐⭐⭐⭐
a, b = tuple解包DataLoader 返回 (x, y)⭐⭐⭐⭐
with open(...) as f读写配置文件、数据文件⭐⭐⭐⭐
lambda x: ...sorted/map/filter 辅助⭐⭐⭐
*args, **kwargs灵活传参训练配置⭐⭐⭐
Path(".") / "data"跨平台路径管理⭐⭐⭐
-> Tensor:类型注解代码可读性和 IDE 提示⭐⭐⭐⭐
try/except异常处理容错加载数据、文件⭐⭐⭐

你还需要知道的(但本文没展开的)

话题本文为何不展开替代方案
装饰器@AI 代码中偶见(@torch.no_grad()),用到了再查知道@是"包装函数"即可
生成器yieldDataLoader 底层用,但初学直接用for遍历下一篇 Pandas 会涉及
多线程/多进程DataLoader 的num_workers参数涉及,但框架封装好了你只需设num_workers=4
正则表达式文本预处理偶用,但有更简单的 str 方法用到时 ChatGPT 帮你写
import深入知道import torch就够了进阶时自然就懂了

版权声明:本文为原创内容,代码可自由使用。转载请标注出处。Python 30 分钟速通:AI 开发用到的语法就够了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询