从今天起,语法课的方法论:每课建立思维模型,不逐个背方法——方法查询交给 AI 和文档。 本周用大模型 API 返回的真实数据当教材,学类型系统与数据结构选型。
| 时间 | 环节 | 要点 |
|---|---|---|
| 0–8 | 导入 | 一段真实 API 返回贴屏幕:730 是什么类型?null 在 Python 里叫什么? |
| 8–20 | 五种核心类型 | int/float/str/bool/None——从 API 响应里逐个现场取值演示 |
| 20–30 | 转换与 f-string | 「730」+1 报错陷阱;{cost:.4f} 格式化;type() 随时查 |
| 30–42 | 动手练习 | 运行场:解析 API 返回 JSON,逐层取值 + 类型判断 |
| 42–55 | 四种结构一句话 | 排队/通讯录/塑封文件/筛子——选型口诀:看操作选结构 |
| 55–68 | 演示 | 多轮对话 messages 管理 + 字典统计 token 消耗 + 推导式一行提取 |
| 68–80 | 动手练习 | 运行场:遍历统计 + 推导式提取 + max 找最长消息 |
| 80–90 | 选型辩论 | 去重用 list 还是 set?对话历史用 list 还是 dict?——举手说理由 |
| 90–100 | 3D 演示 + 小测 | 一切皆对象内存空间演示(three.js);随堂小测 3 题 |
运行场练习当堂完成;3D 演示可让学生自己在手机上打开操作。
{
"id": "chatcmpl-001", # 字符串 str
"created": 1712345678, # 整数 int
"temperature": 0.7, # 浮点数 float
"stream": false, # 布尔 bool(JSON 的 false)
"object": null, # None(JSON 的 null)
"choices": [ {...}, {...} ] # 列表 list,里面套字典 dict
}
type() 随时查tokens = 730 # int
cost = 730 * 0.001 / 1000 # 自动变 float
# 字符串数字陷阱:
"730" + 1 # TypeError!字符串不能加数字
int("730") + 1 # 731 —— 先转换,再运算
# f-string:把变量嵌进字符串
print(f"本次对话 token 数 {tokens},费用 {cost:.4f} 元")
TypeError 第一反应:是不是该转换类型时没转换?{cost:.4f} 保留 4 位小数、{n:,} 千分位——格式化是输出专业感的第一步msgs.append(m)cfg["model"]x, y = posseen.add(url)选型口诀:看到数据先问「要什么操作」——按序存取用 list,按键查找用 dict,不许改用 tuple,要去重用 set。
在 Python 里,数据和行为是绑在一起的:
name = "hello"
type(name) # <class 'str'> —— 它是 str 类的一个对象
name.upper() # 'HELLO' —— upper 是对象自带的方法
name[0] # 'h' —— 按索引取字符
name[1:4] # 'ell' —— 切片 [起:止)
== 比较值,is 比较身份——判断 None 一律用 is3D 直觉演示:一切皆对象 · 内存空间(逐行执行看对象诞生与名字绑定)
逐行执行代码,在 3D 内存空间里看对象诞生、名字绑定、a is b 与 a == b 的区别——可拖拽旋转、点击对象查信息卡。 新窗口打开 →
API 返回的是「列表套字典」——遍历、统计、提取:
# 普通写法
questions = []
for m in messages:
if m["role"] == "user":
questions.append(m["content"])
# 推导式:一行等价
questions = [m["content"] for m in messages if m["role"] == "user"]
# ↑拿什么 ↑从哪遍历 ↑只要谁
字节 → 比特流 → 6 位重排 → 查表的每一步动画,支持自定义输入实时重算——经典作业的算法本质,先混个眼熟。 新窗口打开 →
seen = set() 是标准姿势。
举手表决定立场,说出理由——选型理由比结论更重要。
深入阅读:M2 模块页 · 经典笔记 4.5 列表 · 6.4 字典