HelloAI
L1 第 7 篇 🐣 难度 🕒 10 分钟

Python 速成(一):30 分钟从零到能写函数

只讲 ML 用得到的 Python 子集——不教 OOP,不教装饰器,不教 generator。够用就好。

阿莱
2026/6/20

读完 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 最大的陷阱:想学完”全部 Python”再开始 ML。

真相是:Python 是用出来的。 你越早开始跑 ML 代码、越早遇到具体问题、越早查文档——学得越快。

后面 L1-08 到 L1-10 我们直接用 NumPy / PyTorch 实战。你边写边学。

下一篇:《NumPy 数组运算:让 Python 像 MATLAB 一样会做矩阵》

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。