编程启蒙|Scratch 转 Python 系列第 18 天:模块导入与常用标准库积木双向对照(AI 工具箱模块化实战)
📚 系列定位:从 Scratch 积木到 Python 代码,双向对照学 AI 编程
✍️ 作者:梅雅达编程工作室
🎯 本篇难度:⭐⭐⭐(进阶必学)
一、摘要
本篇是 Scratch 转 Python 系列第 18 天,我们要给你的代码从"一整坨"进化到"模块化工程"。学完这一篇你会明白:为什么专业项目都不是一个大文件跑到底,而是把 Agent、工具、存档、日志拆成独立文件;import 一句话就能像"召唤扩展积木包"一样把它们组合起来。我们会讲透 Python 五大常用标准库——random / json / os / sys / datetime,并把之前散落的代码整理成一个规整的 AI 工具箱模块化项目,为 Day 19 调真实大模型 API 打好工程基础。
二、本节课学习目标
- 🎯 掌握 模块导入四种写法:
import/from...import/as别名 /from...import * - 🎯 掌握 五大常用标准库:
random / json / os / sys / datetime的核心用法 - 🎯 学会 自定义模块:把自己写的
.py文件当模块被其他文件导入 - 🎯 AI 应用场景:把 Day 15-17 的 Agent 代码拆成模块化项目结构(大厂标准工程雏形)
三、专业名词通俗释义
| 名词 | 通俗解释 | Scratch 类比 |
|---|---|---|
模块(Module) |
一个 .py 文件就是一个模块 |
一个装满自定义积木的"积木包" -.sb3文件 |
| 标准库 | Python 自带的模块,安装即用不需要下载 | Scratch 自带的运动、外观、声音积木大类 |
| 第三方库 | 需要 pip install 才能用的模块(Day 19 见) |
Scratch 商店里下载的扩展积木包 |
import 导入 |
告诉 Python:“我要用某个模块” | Scratch 里勾选"添加扩展"打开一大类积木 |
别名(as) |
给长名字模块起小名,方便打字 | 把「颜色-饱和度-亮度」简称成「HSV」 |
包(Package) |
一堆模块组成的文件夹,里面必须有 __init__.py |
一个装了多个积木包的收藏夹 |
四、分模块双向对照知识点
模块 1:import 四种写法
Scratch 积木逻辑:
想用某类积木前,先在"添加扩展"里勾选它;勾好之后所有相关积木就出现在积木栏可以拖了。
Python 源码(含 Scratch 积木注释):
# 【Scratch积木】添加扩展「random 积木包」
import random # 写法 1:导入整个模块
print(random.randint(1, 10)) # 使用时带模块名前缀
# 【Scratch积木】添加扩展「random 积木包」并只取 randint 积木
from random import randint # 写法 2:只导入指定函数
print(randint(1, 10)) # 直接用,不用带前缀
# 【Scratch积木】添加扩展并起个短名
import random as rd # 写法 3:起别名
print(rd.randint(1, 10))
# 【Scratch积木】添加扩展并把所有积木都倒进来(谨慎使用)
from random import * # 写法 4:全部导入(不推荐)
print(randint(1, 10))
运行结果(每次不同):
7
3
9
2
核心易错说明:
- 写法 1 最稳,写法 4 最危险(容易和自己变量名撞车)
- 团队协作强烈推荐写法 1 或写法 3
模块 2:random 随机模块(AI 数据采样必备)
Scratch 积木逻辑:
「在 1 到 100 之间取随机数」这类积木,全都对应 random 库。
Python 源码(含 Scratch 积木注释):
import random
# 【Scratch积木】在 (1) 到 (100) 之间取随机数
n = random.randint(1, 100)
# 【Scratch积木】从列表中随机取一个
fruit = random.choice(["苹果", "香蕉", "橘子"])
# 【Scratch积木】打乱列表顺序
data = [1, 2, 3, 4, 5]
random.shuffle(data)
# 【Scratch积木】从列表中随机取 3 个不重复的(抽样)
sample = random.sample(range(1, 100), 3)
print(n, fruit, data, sample)
运行结果(示例):
42 香蕉 [3, 5, 1, 4, 2] [17, 63, 88]
核心易错说明:
randint(a, b)是闭区间(两端都包含),和很多语言不同random.shuffle()是原地打乱,返回值是 None,别赋值
模块 3:json 数据序列化(AI 存档标配)
Scratch 积木逻辑:
Scratch 变量能直接看到值,Python 想把字典/列表存到文件,就得先转成 JSON 字符串。
Python 源码(含 Scratch 积木注释):
import json
data = {"name": "小凌", "skills": ["Python", "Scratch"]}
# 【Scratch积木】把字典变成 JSON 字符串
s = json.dumps(data, ensure_ascii=False)
# 【Scratch积木】把 JSON 字符串变回字典
back = json.loads(s)
# 【Scratch积木】把字典存到文件
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# 【Scratch积木】从文件读出来
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(s, back, loaded)
运行结果:
{"name": "小凌", "skills": ["Python", "Scratch"]} {'name': '小凌', 'skills': ['Python', 'Scratch']} {'name': '小凌', 'skills': ['Python', 'Scratch']}
核心易错说明:
dumps/loads处理字符串;dump/load(不带 s)处理文件对象——一个字之差,别搞混- 中文要
ensure_ascii=False,缩进要indent=2(存档更好读)
模块 4:os 与 sys 系统交互
Scratch 积木逻辑:
Scratch 一般不需要看"文件在哪、当前目录哪儿"。Python 想操作文件系统就得用 os;想拿命令行参数就得用 sys。
Python 源码(含 Scratch 积木注释):
import os
import sys
# 【Scratch积木】获取当前工作目录
cwd = os.getcwd()
# 【Scratch积木】判断文件是否存在
exists = os.path.exists("data.json")
# 【Scratch积木】列出目录下所有文件
files = os.listdir(".")
# 【Scratch积木】拼路径(跨平台友好)
path = os.path.join("data", "history.json")
# 【Scratch积木】获取命令行参数
args = sys.argv # ['day18_code.py', '--verbose'] 之类
print(cwd, exists, len(files), path, args)
运行结果(示例):
/Users/mabel/project True 12 data/history.json ['day18_code.py']
核心易错说明:
- 拼路径永远用
os.path.join,不要手写"a/b/c"(Windows 分隔符不同) sys.argv[0]是脚本本身,用户传的参数从sys.argv[1]开始
模块 5:datetime 时间处理(AI 日志/存档时间戳)
Scratch 积木逻辑:
Scratch 里获取"当前时间"是几个专属积木;Python 用 datetime 模块统一管理。
Python 源码(含 Scratch 积木注释):
from datetime import datetime, timedelta
# 【Scratch积木】当前 (日期时间)
now = datetime.now()
# 【Scratch积木】格式化成好看的字符串
s = now.strftime("%Y-%m-%d %H:%M:%S")
# 【Scratch积木】3 天前的时间
three_days_ago = now - timedelta(days=3)
# 【Scratch积木】字符串反解析回时间对象
parsed = datetime.strptime("2026-07-12 15:30:00", "%Y-%m-%d %H:%M:%S")
print(s, three_days_ago.strftime("%Y-%m-%d"), parsed)
运行结果(示例):
2026-07-12 01:23:45 2026-07-09 2026-07-12 15:30:00
核心易错说明:
strftime是"time to string",strptime是"string to time",别写反%Y是四位年,%y是两位年,别用错
scratch积木代码说明
因scratch积木里没有random 随机模块,json 数据序列化模块,os 与 sys 系统交互模块及datetime 时间处理模块只能自定义模块了
五、综合实战项目:AI 工具箱模块化项目
把 Day 15-17 的 Agent 代码拆成一个规整的模块化项目结构,体验大厂工程写法。
目标目录结构
ai_toolbox/
├── main.py # 主程序入口
├── agents/
│ ├── __init__.py
│ ├── base.py # AIRole 基类
│ ├── kefu.py # 客服 Agent
│ └── fanyi.py # 翻译 Agent
├── utils/
│ ├── __init__.py
│ ├── storage.py # JSON 存档工具
│ └── logger.py # 日志工具
└── data/
└── history.json # 对话历史存档
Scratch 积木思路
- 把每类精灵放进独立的"积木包文件"
- 把工具积木(存档、日志)放进
utils积木包 - 主舞台
main.py只负责:import各积木包 + 组合成完整程序 - 增加新角色时,只加新文件,不动老代码

Python 完整可运行代码(片段)
# main.py(配套源码 day18_code.py 单文件模拟版)
from agents.base import AIRole
from agents.kefu import KefuAgent
from utils.storage import save_history, load_history
from utils.logger import log
log("程序启动")
kefu = KefuAgent("小助手", "热情耐心")
kefu.chat("你好")
save_history({"客服": kefu.history})
运行结果预览:
[2026-07-12 01:30:00] 程序启动
【客服·小助手】亲亲~您说的「你好」已收到,正在为您处理哦~
[2026-07-12 01:30:00] 存档成功 → history.json
注:本篇配套 day18_code.py 用单文件模拟多模块(用类和函数分区代替真实文件夹),方便直接运行;真实工程结构见专栏后续文章。
六、高频易错点总结
- ❌ 循环导入(
Circular Import):A 导入 B,B 又导入 A,Python 会报错——设计模块时要按"层级"划分 - ❌
from...import *覆盖内置:from math import *可能覆盖你自己的pi变量,团队协作强烈不建议 - ❌
json和Python 字典混淆:JSON 里True/False/None分别对应 Python 的True/False/None,但 JSON 文件里写的是小写true/false/null - ❌
os.path.join不加空格:os.path.join('a', 'b')拼出'a/b'或'a\\b',都是干净路径,别自己加/ - ❌
datetime时区遗忘:跨服务器时严格用datetime.utcnow(),本地写日志用datetime.now()就够
七、💡 学习提示
为鼓励大家动手练习、吃透编程逻辑,本篇不提供 Scratch 成品源码,请对照截图亲手搭建积木完成复刻!
配套 Python 代码可直接复制运行学习。
八、往期历史笔记
-
编程启蒙|Scratch 转 Python 系列第 3 天:循环重复积木双向对照(AI 批量循环处理,已收录 AI Agent 技术社区)
-
编程启蒙|Scratch 转 Python 系列第 5 天:自定义积木 / 函数双向对照(AI 工具封装、重复指令简化实战)
-
编程启蒙|Scratch 转 Python 系列第 6 天:列表、数组积木双向对照(AI 底层语法 / AI 批量数据处理实战)
-
编程启蒙|Scratch 转 Python 系列第 7 天:猜数字大挑战·升级版实战(AI 出题 + 二分查找最优解 + 完整命令行游戏 已被收录在智能体开发者社区)
-
编程启蒙|Scratch 转 Python 系列第 12 天:记忆翻牌游戏实战(AI 图案主题包 + 存档排行榜 已被收录在2048 AI社区)
-
编程启蒙|Scratch 转 Python 系列第 13 天:异常处理 try/except 积木双向对照(AI 接口调用容错实战)
-
编程启蒙|Scratch 转 Python 系列第 14 天:AI 提示词管理工具实战(增删改查 + 存档导入 + 异常兜底)
-
编程启蒙|Scratch 转 Python 系列第 15 天:类与对象积木双向对照(AI 角色类封装实战)已被智能体开发者社区收录
-
编程启蒙|Scratch 转 Python 系列第 16 天:继承与多态积木双向对照(AI Agent 角色体系实战)已被智能体开发者社区收录
-
编程启蒙|Scratch 转 Python 系列第 17 天:AI 聊天机器人游戏实战(AI 多角色对话 + 人设切换实战)已被DAMO开发者矩阵收录
十、下一章预告
第 19 天:AI API 调用入门(requests + JSON + 大模型对接实战)
学了 18 天的 Python,明天终于要真正调用大模型 API 了!
requests第三方库 vsurllib标准库- 请求头、参数、鉴权、超时、重试
- JSON 请求体拼装 + 响应解析
- AI 场景:调用真实大模型 API(DeepSeek/通义/扣子),让你的 Agent 从"假装懂"变成"真的会"
激动人心的一天,别错过!🚀
十一、原创声明
本文为「梅雅达编程笔记」原创技术教程,未经授权禁止转载、洗稿或用于商业培训。转载合作请联系作者。系列内容持续更新中,欢迎收藏 CSDN 专栏「编程启蒙–scratch转python」追更 🍃
更多推荐


所有评论(0)