Python 速成(一):30 分钟从零到能写函数
只讲 ML 用得到的 Python 子集——不教 OOP,不教装饰器,不教 generator。够用就好。
读完 L1 数学块,你需要把数学写成代码跑起来。
工具:Python。
我们不打算讲完整 Python——那要一本书。只讲 ML 实战需要的子集。读完这篇你能写函数、做循环、操作列表——足够你跑通后面所有代码。
准备:打开 Colab
不需要在本地装 Python。打开 Google Colab → 新建笔记本,就能直接跑代码。免费、零配置、自带 GPU。
每段代码,打开 Colab 跑一遍。
第一站:变量
Python 不用声明类型,直接赋值:
x = 10 # 整数
y = 3.14 # 浮点数
name = "Hello" # 字符串
ok = True # 布尔值
nothing = None # 空值
打印用 print():
print(x) # 10
print(f"x = {x}") # x = 10 ← f-string(重要!)
f-string 是 Python 3.6+ 的语法糖,ML 工程师天天用——在字符串前加 f,就能用 {变量名} 插值。
第二站:算术与比较
# 算术
3 + 5 # 8
10 / 3 # 3.333... (除法返回浮点)
10 // 3 # 3 (整除)
10 % 3 # 1 (余数)
2 ** 10 # 1024 (幂)
# 比较
3 == 3 # True
3 != 4 # True
3 > 5 # False
3 <= 3 # True
# 逻辑
True and False # False
True or False # True
not True # False
第三站:列表(数组)
Python 的”数组”叫列表(list):
nums = [1, 2, 3, 4, 5]
# 取值(索引从 0 开始)
nums[0] # 1
nums[-1] # 5(最后一个)
# 切片
nums[1:4] # [2, 3, 4](包左不包右)
nums[:3] # [1, 2, 3]
nums[2:] # [3, 4, 5]
# 长度
len(nums) # 5
# 修改
nums[0] = 99
nums.append(6) # 在末尾加
nums.pop() # 移除末尾
# 列表推导(这个超有用)
squares = [x ** 2 for x in nums]
evens = [x for x in nums if x % 2 == 0]
[expression for x in list if condition] 是 Python 最 pythonic 的写法。
比写 for 循环再 append 简洁 10 倍。多看几遍,自己写写。
第四站:字典
键值对结构(其它语言的 hashmap / object):
person = {
"name": "Alice",
"age": 25,
"job": "engineer"
}
# 访问
person["name"] # "Alice"
person.get("phone", "N/A") # 不存在时给默认值
# 修改
person["age"] = 26
person["email"] = "a@b.com"
# 遍历
for key in person:
print(key, person[key])
for key, value in person.items():
print(f"{key} = {value}")
第五站:条件与循环
if / elif / else
x = 10
if x > 100:
print("big")
elif x > 5:
print("medium")
else:
print("small")
关键:Python 用缩进(4 个空格)表示代码块,没有大括号。
for 循环
# 遍历列表
for fruit in ["apple", "banana", "cherry"]:
print(fruit)
# range() 生成数字序列
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 8): # 2 到 7
print(i)
# 带索引遍历
for i, name in enumerate(["a", "b", "c"]):
print(i, name)
while 循环
x = 10
while x > 0:
print(x)
x -= 1
第六站:函数
def add(a, b):
return a + b
print(add(3, 5)) # 8
# 默认参数
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob", "Howdy")) # Howdy, Bob!
# 命名参数
print(greet(greeting="Hi", name="Eve")) # Hi, Eve!
# 多返回值
def divide(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder
q, r = divide(17, 5)
print(f"{q} 余 {r}") # 3 余 2
第七站:导入库
import numpy as np # 给 numpy 起别名
from math import sqrt, pi # 只导入需要的
from random import random # 导入函数
# 用
arr = np.array([1, 2, 3])
print(sqrt(16)) # 4.0
print(pi) # 3.14159...
print(random()) # 0-1 之间随机数
第八站:异常处理
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"其它错误: {e}")
finally:
print("总会执行")
ML 代码很少手动 try/except——大多数错误都让它直接抛出更好(方便调试)。
第九站:ML 代码常见 idiom
下面这些写法你会反复见到——先看一遍混个眼熟,写多了自然会用。
Mini-batch 循环
batch_size = 32
n_samples = 1000
# 整数除法 + 列表切片
for i in range(0, n_samples, batch_size):
batch = data[i:i + batch_size]
train_on_batch(batch)
维度操作
# numpy 数组的 shape 解构
X = np.random.randn(100, 768)
batch, dim = X.shape # batch=100, dim=768
字符串模板
epoch = 5
loss = 0.234
acc = 0.876
print(f"Epoch {epoch:03d} | Loss {loss:.4f} | Acc {acc*100:.1f}%")
# Epoch 005 | Loss 0.2340 | Acc 87.6%
{loss:.4f} 意思是”小数点后 4 位”,{epoch:03d} 意思是”3 位整数前面补 0”。训练日志必备。
列表推导嵌套
# 把 N 句话的每个词转成小写
sentences = ["Hello World", "Foo Bar"]
lower_words = [[w.lower() for w in s.split()] for s in sentences]
# [["hello", "world"], ["foo", "bar"]]
第十站:测试一下
打开 Colab,跑这段代码——它做了一个完整的 ML 数据预处理:
import numpy as np
# 模拟"加载数据"
data = [
{"text": "Hello world", "label": 1},
{"text": "Goodbye", "label": 0},
{"text": "AI is amazing", "label": 1},
]
# 数据清洗 + 转换
texts = [d["text"].lower() for d in data]
labels = np.array([d["label"] for d in data])
# 长度统计
lengths = [len(t.split()) for t in texts]
print(f"平均长度: {np.mean(lengths):.2f} 词")
# 简单分类计数
def count_labels(labels):
counts = {}
for l in labels:
counts[int(l)] = counts.get(int(l), 0) + 1
return counts
print(f"标签分布: {count_labels(labels)}")
# 训练循环模板
def train(data, n_epochs=3):
for epoch in range(n_epochs):
loss = 1.0 / (epoch + 1) # 假装在训练
print(f"Epoch {epoch:02d} | Loss {loss:.4f}")
train(data)
如果你能跑通,理解每一行——你的 Python 基础已经够入门 ML 了。
学 Python 最大的陷阱:想学完”全部 Python”再开始 ML。
真相是:Python 是用出来的。 你越早开始跑 ML 代码、越早遇到具体问题、越早查文档——学得越快。
后面 L1-08 到 L1-10 我们直接用 NumPy / PyTorch 实战。你边写边学。
下一篇:《NumPy 数组运算:让 Python 像 MATLAB 一样会做矩阵》
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。