模块 01 · 语言基础
Python 与数据实践
Python 语言核心 + 数据处理工具链:从环境搭建到并发模型,再到 NumPy / Pandas / 可视化。
这是一套写给 AI 时代开发者的 Python 实践课程:默认你有一定编程经验(任何语言),不需要 Python 基础。课程覆盖两件事——把 Python 语言本身学透(从语法到并发),以及掌握 AI 开发绕不开的数据处理工具链(NumPy / Pandas / 可视化)。
课程解决什么问题
写 AI 应用、做 Agent、跑数据 pipeline,Python 是事实标准。但很多人对 Python 的掌握停留在"能跑就行":
- 装饰器会写,但描述符、元类只听过名字
- 知道有 GIL,说不清线程和进程到底怎么选
async/await抄得出样板,事件循环的运转机制是黑盒- 拿到一份数据,除了 for 循环不知道还能怎么办
这套课程的立场:语言核心讲深,数据处理讲实用。前 24 章把 Python 的对象模型、并发模型、工程化体系完整过一遍;后 7 章进入数据科学工具链,向量化思维和结构化数据处理是 AI 开发的日常刚需。
八个部分,三十一章
| 部分 | 主题 | 章节 |
|---|---|---|
| 一 · 起步 | 装好环境,说清语法 | 01-03 |
| 二 · 函数 | 抽象的第一课 | 04-05 |
| 三 · 对象模型 | 类、协议与元编程 | 06-10 |
| 四 · 语言协议 | 迭代、上下文与异常 | 11-13 |
| 五 · 工程化 | 类型、模块与生态 | 14-17 |
| 六 · 并发 | 线程、进程与异步 | 18-21 |
| 七 · 交付 | 构建、仓库与调试 | 22-24 |
| 八 · 数据实践 | NumPy / Pandas / 可视化 | 25-31 |
完整目录
第一部分 · 起步(01-03)
| 章 | 标题 | 内容 |
|---|---|---|
| 01 | 环境搭建与版本管理 | Python 发行版、pyenv、多版本共存、编辑器配置 |
| 02 | 变量、表达式与流程控制 | 数据类型、运算、分支循环、输入输出 |
| 03 | 序列、字典与集合 | 四大容器的底层结构与操作全景 |
第二部分 · 函数(04-05)
| 章 | 标题 | 内容 |
|---|---|---|
| 04 | 函数设计与 lambda | 五种传参、返回值、高阶函数 |
| 05 | 作用域规则与闭包 | LEGB、闭包陷阱、nonlocal |
第三部分 · 对象模型(06-10)
| 章 | 标题 | 内容 |
|---|---|---|
| 06 | 类的定义与实例化 | 实例成员、类成员、继承与 MRO |
| 07 | 类型判定与抽象基类 | type 与 isinstance、鸭子类型、ABC |
| 08 | 魔术方法全景 | __new__/__init__/__call__、运算符重载、容器协议 |
| 09 | 描述符与元类 | 属性描述协议、property 原理、元类三件套 |
| 10 | 装饰器 | 带参装饰器、functools 工具、类装饰器 |
第四部分 · 语言协议(11-13)
| 章 | 标题 | 内容 |
|---|---|---|
| 11 | 迭代协议与生成器 | 可迭代/迭代器、yield、生成器表达式 |
| 12 | with 与上下文协议 | 上下文管理器两种写法、异常时的清理 |
| 13 | 异常体系与处理 | 异常层次、自定义异常、异常链 |
第五部分 · 工程化(14-17)
| 章 | 标题 | 内容 |
|---|---|---|
| 14 | 类型标注 | typing 模块、泛型、协议类型 |
| 15 | 模块与包的组织 | import 机制、包结构设计 |
| 16 | 标准库巡礼 | 文件 IO、路径、时间、collections 等高频模块 |
| 17 | 依赖管理与第三方库 | pip / venv、虚拟环境、依赖管理 |
第六部分 · 并发(18-21)
| 章 | 标题 | 内容 |
|---|---|---|
| 18 | 线程与进程 | GIL、threading、multiprocessing、池 |
| 19 | 事件循环 | asyncio 的运转模型 |
| 20 | Future 与协程 | Future 类、协程对象、await 语义 |
| 21 | asyncio 实战 | gather、并发控制、异步生态 |
第七部分 · 交付(22-24)
| 章 | 标题 | 内容 |
|---|---|---|
| 22 | 构建与发布 | pyproject.toml、构建后端、私有发布 |
| 23 | 工程化工具链 | uv、Makefile、项目管理 |
| 24 | monorepo 与调试 | workspace 组织、断点调试原理 |
第八部分 · 数据实践(25-31)
| 章 | 标题 | 内容 |
|---|---|---|
| 25 | Jupyter 交互环境 | notebook 工作流、魔法命令 |
| 26 | NumPy 数组与向量化 | ndarray、广播、轴、数据操作 |
| 27 | Pandas 数据结构 | Series、DataFrame、索引 |
| 28 | Pandas 数据清洗 | 缺失值、变换、分组聚合 |
| 29 | Matplotlib 绘图体系 | 图形语法、坐标轴、多子图 |
| 30 | Matplotlib 动画与交互 | 动画、滑块按钮等交互组件 |
| 31 | Seaborn 统计可视化 | 统计图表、风格系统 |
每章的结构
每章一个文件夹,固定三件套:
NN-章名/
课件.md # 讲义正文:概念 → 示例 → 练习
demo.py # 可运行演示代码
answers/ # 练习参考答案(p1.py、p2.py…)
练习的使用方式:先自己写,卡住再看答案;答案只是一种解法,不是标准答案。所有示例与答案代码都带类型标注(前两章按内容进度除外)——这是课程坚持的工程习惯。
三条阅读路线
完整路线(零基础):01 → 31 顺序读。对象模型部分(06-10)是全课程最硬的一段,慢一点没关系。
转语言路线(有其他语言经验):快速过 01-05,精读 06-24——Python 的对象模型和并发模型与其他语言差异最大,也是面试和实战的高频区。
数据速成路线(急着用数据工具):直接从 25 开始,25-31 连读;遇到 Python 语法障碍再回查前面对应章节。
环境准备
# 需要 Python 3.12+(第 01 章会讲多版本管理)
python --version
# 数据实践部分(25-31 章)需要:
pip install numpy pandas matplotlib seaborn jupyter openpyxl
一个建议
并发部分(18-21)是这门课的分水岭:很多人在这里从"用 Python"变成"懂 Python"。如果一时消化不了事件循环,先记住使用范式把代码写对,回头再补原理——第 19 章的模型值得反复看。
从 01 开始吧。
章节清单
01环境搭建与版本管理写代码之前,得先让 Python 在你的电脑上"安家"。这一章要做的事情很朴素:把环境装好、装顺,并且学会用工具同时管理多个 Python 版本——这件事第一天做对,后面三十章都不会被环境问题折腾11 分钟 · 6 个代码示例02变量、表达式与流程控制上一章环境已经跑通,从这一章开始正式写代码。我们要解决三件事:数据怎么存(变量)、数据怎么算(运算符与表达式)、程序怎么根据不同情况走不同的路、怎么重复干活(流程控制)。这三样是所有 Python 代码的地基,务必敲熟27 分钟 · 28 个代码示例03序列、字典与集合前面学过的变量,一次只能攥住一个值。可现实里的数据很少这么"独来独往":一张订单挂着好几件商品,一张名片挤着姓名、电话、职位好几个字段,一个商品可能贴着一堆标签。Python 为这类"批量数据"准备了一整套内置的打包工具…38 分钟 · 30 个代码示例04函数设计与 lambda写过几章代码后你大概已经察觉:同一段计算逻辑,常常在好几个地方反复出现。函数就是解决这个问题的——把一段逻辑起个名字封装起来,哪里要用就喊一声名字。代码不再重复,读起来也更清爽26 分钟 · 33 个代码示例05作用域规则与闭包你一定遇到过这类"灵异事件":变量明明定义过,换到另一个函数里用,解释器却说"不认识这个名字";或者在函数里给外面的计数加一,加完一看,外面的值纹丝不动。这些现象背后的机制就是作用域10 分钟 · 18 个代码示例06类的定义与实例化Python 是一门彻头彻尾的面向对象语言。所谓类(Class),可以理解成一张图纸;所谓对象(Object),就是照着图纸造出来的零件。图纸画一次,零件可以造无数个,每个零件身上带着自己的数据(属性),也带着自己的行为…24 分钟 · 26 个代码示例07类型判定与抽象基类前面我们已经会造类、会造对象了。这一章往上再走一层,回答几个更本质的问题:对象的"类型"到底由什么决定?类自己又是谁造出来的? 把这条"制造链"弄清楚之后,我们再学一个工程里非常值钱的工具——抽象基类(Abstract …16 分钟 · 17 个代码示例08魔术方法全景平时写 Python,我们其实一直在和一套"看不见的约定"打交道:print(obj) 能打印出东西、obj[0] 能按下标取值、a + b 能做加法、len(obj) 能算长度。这些写法之所以对自定义类也照样好使,是因…32 分钟 · 21 个代码示例09描述符与元类上一章我们见识了一批魔术方法,其中 getattr 一家负责在实例层面拦截属性访问。这一章往更深处走两层:30 分钟 · 21 个代码示例10装饰器写函数写着写着,你会发现一堆函数共享着同样的"周边动作":执行前打个日志、计时、鉴权、缓存结果、重试……要是每个函数都手抄一遍这些代码,既臃肿又难维护。装饰器就是解决这件事的语法工具:把"周边动作"抽成一个可复用的壳,往…8 分钟 · 9 个代码示例11迭代协议与生成器for 循环你从第 02 章用到现在,早就成了肌肉记忆。但你有没有追问过一句:for 凭什么知道"下一个值"是谁?凭什么列表、字符串、字典、文件都能往 for 里塞,一个数字却会被当场拒绝?这一章我们就把 for 的机箱…24 分钟 · 30 个代码示例12with 与上下文协议写代码久了你会发现一件事:大量资源都讲究"有借有还"——打开的文件要关、连上的服务要断、占到的锁要放、申请的句柄要释放。麻烦在于,"还"这个动作太容易掉链子:一个提前的 return、一个半路杀出的异常,清理代码就被整个…12 分钟 · 12 个代码示例13异常体系与处理程序只要在跑,就免不了出岔子:文件找不到、网络断了、用户输入了奇怪的东西……出错本身并不可怕,可怕的是程序直接躺平——屏幕上甩出一大坨红色 traceback,然后整个进程退场。Python 为此准备了一整套"异常处理"…16 分钟 · 16 个代码示例14类型标注学习建议:从本章起,请在 VS Code 的设置里把 python.analysis.typeCheckingMode 打开(basic 起步,胆子大了可以上 strict),让编辑器实时帮你挑类型的毛病。本章的所有示例…17 分钟 · 20 个代码示例15模块与包的组织写到这个阶段,你在一个 .py 文件里已经能堆出几百行像样的程序了。但麻烦也跟着来:文件越长,找一个函数越要翻半天屏;下一个项目想复用上次写的那几个工具,只能整段复制过去。Python 给出的答案很朴素——把代码拆进多个…15 分钟 · 17 个代码示例16标准库巡礼装好 Python 的那一刻,你手里其实已经攥着一只塞得满满的工具箱——标准库。字符串处理、文件读写、时间计算、目录遍历……这些几乎每个项目都要做的事,官方早就替你写好了。这一章带你把工具箱打开逛一圈:先分清"Pytho…7 分钟 · 6 个代码示例17依赖管理与第三方库标准库管的是"通用到人人都需要"的那部分需求,但你手头的具体工作——调一个大模型接口、解析一种冷门数据格式、画一张统计图——大概率早就有人写成库挂到网上了。Python 最厚的护城河就是这片第三方生态,而用好它靠三样基本…8 分钟 · 14 个代码示例18线程与进程到目前为止,我们写的所有程序都活在单线程世界里:代码从上往下、一件接一件地执行。可现实中的任务常常不是这样——你可能要给几百张照片批量生成缩略图,要同时调用十几个外部接口,要把一段视频逐帧处理。单线程只能老老实实排队,一…27 分钟 · 18 个代码示例19事件循环上一章的速查表里,"异步"一栏反复出现一个词:asyncio。而在 asyncio 的世界里,出场率最高的概念非事件循环(event loop)莫属——协程靠谁调度?await 为什么能"等而不卡"?答案全在它身上。本章…11 分钟 · 9 个代码示例20Future 与协程第 19 章把事件循环拆开看了个明白:一个线程、两个队列、一串回调,循环每一圈都在做"执行 ready 队列里排队的函数"这件事。但有两个问题当时刻意绕开了:23 分钟 · 17 个代码示例21asyncio 实战第 19 章拆解了事件循环的运转模型,第 20 章又用 Future 和协程手搓了一套驱动机制。造轮子的部分到此为止——从本章起,我们把自制的零件全部换成官方和社区的现成 API,用工程级的姿势写异步代码。你会看到:之前…34 分钟 · 39 个代码示例22构建与发布到现在为止,你写的每一个工程都只在自己电脑上活得好好的。可是代码的价值,恰恰在于它能跑到别人的环境里去——同事要用、服务器要用、三个月后换了机器的你也要用。这一章就解决一件事:怎么把一坨源码,变成一条命令就能装进任何环境…12 分钟 · 12 个代码示例23工程化工具链上一章走完发布全流程的同学应该有体感:为了发布一个小小的库,我们动用了 venv 建环境、pip 装工具、build 做打包、twine 传产物……工具四散、命令一长串,换个工程还得从头再来一遍。多版本 Python 的…18 分钟 · 33 个代码示例24monorepo 与调试工程化的最后一课,收两个尾。其一,项目做大了会「裂变」——对外一个应用,底下还养着工具库、算法库、若干脚本,仓库该怎么组织才不乱?其二,代码一多难免出岔子,全靠 print 排查既慢又伤士气,得学会让程序停在出问题的那一…21 分钟 · 26 个代码示例25Jupyter 交互环境第 22-24 章里,我们一直是"工程师"的姿态:配置构建、管理依赖、组织 workspace、上断点排查问题——所有努力都指向同一个目标,把代码当成产品,稳定地交到别人手里11 分钟 · 17 个代码示例26NumPy 数组与向量化上一章,notebook 实验台已经搭好,也试了试手。但很快你就撞上新麻烦:手里只有 Python 列表,算个均值要 sum(x) / len(x),两列数据对应相乘得写 for 循环——数据一多,代码臃肿,速度还慢40 分钟 · 46 个代码示例27Pandas 数据结构第 26 章的 NumPy 把「同质数值 + 广播」玩得很转:一个数组里全是数字,运算又快又省心。可随手打开一张真实业务表——比如一份员工花名册——里面是姓名、部门、职级这样的文字,混着工龄、薪资这样的数字,还零星缺着几…17 分钟 · 31 个代码示例28Pandas 数据清洗上一章把 data/staff.csv 读成了 DataFrame,也留了一串悬念:dtype 清一色 object、员工号 E029 出现两次、月薪一列里同时住着 42k、20w/年、12k~15k 这些互不相识的写法…33 分钟 · 64 个代码示例29Matplotlib 绘图体系数据这条流水线走到头了:第 25 章在 Jupyter 里试算,第 26 章用 NumPy 把计算向量化,第 27、28 章用 Pandas 把表洗好、聚合完。结论都躺在内存里,只差最后一道工序——把它变成别人一秒能看懂…17 分钟 · 14 个代码示例30Matplotlib 动画与交互上一章末尾留了个尾巴:静态图是"定妆照",拍完就定格了。可现实里的数据故事经常是动态的——气温逐小时爬升、监控指标滚动刷新、参数一调结果跟着变。这一章给 Matplotlib 装上两样东西:时间轴(动画,图自己动)和操纵…27 分钟 · 11 个代码示例31Seaborn 统计可视化最后一章。前两章你在 Matplotlib 里手动挡开得辛苦:每根柱子、每条网格、每个配色都要亲口交代。这一章换 Seaborn 上场——它是垫在 Matplotlib 之上的统计可视化封装,主张你负责说清"用什么数据…11 分钟 · 9 个代码示例