首页/Python 与数据实践
模块 01 · 语言基础

Python 与数据实践

Python 语言核心 + 数据处理工具链:从环境搭建到并发模型,再到 NumPy / Pandas / 可视化。

31 章Python & Data

这是一套写给 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 个代码示例