大家好,我是正在实战各种 AI 项目的程序员晚枫。
深入 CPython 源码,真正理解 Python 的运行机制。
《Python 编程从入门到实践(第 3 版)》 - 零基础入门
《流畅的 Python(第 2 版)》 - 进阶提升
《CPython 设计与实现》 - 源码深度
学习路线: 零基础 → 《从入门到实践》 → 《流畅的 Python》 → 本门课程 → 《CPython 设计与实现》
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
开始学习:第 1 讲:CPython 概览
大家好,我是正在实战各种 AI 项目的程序员晚枫。
成为 CPython contributor,为世界上最流行的编程语言贡献力量!
1 | # 1. Fork 仓库 |
| 类型 | 难度 | 示例 |
|---|---|---|
| 文档 | ⭐ | 修正 typo |
| 测试 | ⭐⭐ | 添加测试用例 |
| Bug 修复 | ⭐⭐⭐ | 修复崩溃问题 |
| 新特性 | ⭐⭐⭐⭐ | PEP 实现 |
恭喜完成 CPython 底层原理 20 讲!你已掌握:
现在,去探索 Python 源码的奥秘吧!
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
学习路线: 零基础 → 《从入门到实践》 → 《流畅的 Python》 → 本门课程 → 《CPython 设计与实现》
← 上一讲:性能分析与优化 | 课程大纲 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| 微博 | @程序员晚枫 |
| 知乎 | @程序员晚枫 |
| 抖音 | @程序员晚枫 |
| 小红书 | @程序员晚枫 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
先测量再优化!用工具找到真正的性能瓶颈。
1 | import cProfile |
| 技巧 | 效果 |
|---|---|
| 使用局部变量 | 避免全局查找 |
| 列表推导式 | 比循环快 |
__slots__ | 减少内存占用 |
| 内置函数 | C 实现更快 |
| C 扩展 | 突破性能瓶颈 |
cProfile:性能分析工具。
优化技巧:局部变量、列表推导式、slots 等。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:C 扩展编程 | 下一讲:CPython 贡献指南 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
用 C 编写 Python 模块,突破性能瓶颈!
1 | // mymodule.c |
1 | # setup.py |
Python/C API:编写 C 扩展的接口。
编译安装:setup.py 配置。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:模块导入系统 | 下一讲:性能分析与优化 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
import 语句背后发生了什么?深入理解模块导入机制。
1 | import foo |
1 | # Python 层面的导入钩子 |
导入流程:缓存检查→创建→执行→绑定。
Finder 与 Loader:自定义导入钩子。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:线程与并发 | 下一讲:C 扩展编程 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
CPython 如何实现多线程?理解线程状态和 GIL 的交互。
1 | // Include/pystate.h |
1 | 线程 A 执行 → 遇到 IO/时间片用完 → 释放 GIL |
PyThreadState:线程状态结构体。
线程调度:GIL 释放与获取的交互。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:GIL 全局解释器锁 | 下一讲:模块导入系统 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
为什么多线程不能加速 CPU 密集型任务?罪魁祸首是 GIL。
1 | // Python/ceval_gil.h |
IO 操作时自动释放:文件读写、网络请求、time.sleep()
周期性检查(默认 5ms):
1 | // 每执行一定数量的字节码指令后检查 |
| 场景 | 解决方案 |
|---|---|
| CPU 密集型 | multiprocessing |
| IO 密集型 | threading/asyncio |
| 混合场景 | ProcessPoolExecutor |
GIL 原理:确保单线程执行字节码。
释放时机:IO 操作、周期性检查。
应对策略:多进程、异步 IO。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:栈帧与调用约定 | 下一讲:线程与并发 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
函数调用时发生了什么?深入理解栈帧的创建和销毁。
1 | struct _frame { |
1 | 调用函数 → 创建新栈帧 → 压入栈 → 执行字节码 → 返回结果 → 弹出栈帧 |
栈帧结构:链式结构,包含命名空间、执行状态。
调用过程:创建→执行→销毁的完整流程。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:函数与类实现 | 下一讲:GIL 全局解释器锁 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
函数和类在 C 层面是什么结构?理解 Python 的对象系统。
1 | // Include/funcobject.h |
1 | // 类型对象的结构 |
PyFunctionObject:函数对象的 C 结构体。
PyTypeObject:类型对象的结构,定义类型特性。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:容器类型实现 | 下一讲:栈帧与调用约定 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
列表的动态数组、字典的哈希表、集合的实现原理。
1 | // Include/listobject.h |
Python 3.6+ 使用紧凑字典:
字典保持插入顺序的原理:
1 | d = {'a': 1, 'b': 2, 'c': 3} |
PyListObject:动态数组,over-allocate 扩容。
PyDictObject:紧凑哈希表,保持插入顺序。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:字符串类型实现 | 下一讲:函数与类实现 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
为什么字符串比较用==和 is 结果可能不同?理解字符串的 intern 机制。
1 | // Include/unicodeobject.h |
1 | # 自动 intern 的字符串 |
作用:节省内存,加速字典键的比较。
PyUnicodeObject:Unicode 字符串的 C 结构体。
Intern 机制:字符串驻留,节省内存。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:数字类型实现 | 下一讲:容器类型实现 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
Python 的 int 可以无限大,float 是双精度,它们在 C 中如何实现?
1 | // Include/longintrepr.h |
1 | // -5 到 256 的整数被缓存 |
1 | // Include/floatobject.h |
PyLongObject:变长数组存储大整数。
小整数缓存:-5 到 256 的整数被预创建。
PyFloatObject:使用 C double 类型。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:常见字节码指令 | 下一讲:字符串类型实现 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
2026 年 AI 行业的 5 个关键趋势:
OpenClaw 恰好踩中所有趋势。
这不是巧合,而是必然。
1 | 2024 年:AI Agent 市场规模 $50 亿 |
1 | 传统 AI: |
典型案例:
| 场景 | 传统 AI | AI Agent |
|---|---|---|
| 订机票 | 告诉你怎么订 | 直接帮你订好 |
| 写报告 | 生成报告内容 | 收集数据 + 撰写 + 发送 |
| 客服 | 回答常见问题 | 解决实际问题 |
1 | # OpenClaw 技能示例 |
1 | 2026 年 AI 用户调研(N=10000): |
| 方案 | 代表产品 | 隐私等级 | 局限性 |
|---|---|---|---|
| 云端处理 | ChatGPT | ⭐⭐ | 数据上传 |
| 企业私有 | 企业版 | ⭐⭐⭐⭐ | 成本高 |
| 本地部署 | OpenClaw | ⭐⭐⭐⭐⭐ | 需要设备 |
1 | 数据流向: |
技术实现:
1 | # 本地模型推理 |
1 | 2022: 聊天机器人(只能对话) |
| 能力 | ChatGPT | Claude | OpenClaw |
|---|---|---|---|
| 对话 | ✅ | ✅ | ✅ |
| 查询 | ✅ | ✅ | ✅ |
| 生成 | ✅ | ✅ | ✅ |
| 调用 API | ❌ | ⚠️ | ✅ |
| 执行操作 | ❌ | ❌ | ✅ |
| 自动化 | ❌ | ❌ | ✅ |
1 | # 完整工作流示例 |
| 维度 | 开源 | 闭源 |
|---|---|---|
| 创新速度 | 快 | 慢 |
| 定制能力 | 强 | 弱 |
| 成本 | 低 | 高 |
| 透明度 | 高 | 低 |
| 社区支持 | 强 | 弱 |
1 | GitHub Stars: 248k+ |
1 | OpenClaw 核心 |
1 | 2026 年企业 AI 采用率调研(N=1000): |
| 功能 | 消费级 | 企业级 |
|---|---|---|
| 用户管理 | 单用户 | 多用户 + 权限 |
| 数据安全 | 基础加密 | 企业级加密 |
| 审计日志 | 无 | 完整日志 |
| SLA 保障 | 无 | 99.9% |
| 技术支持 | 社区 | 专属支持 |
1 | # 企业配置示例 |
1 | AI Agent > 聊天机器人 |
1 | 2022: 太早(技术不成熟) |
1 | 开源核心 + 商业服务 |
1 | 技术背景强 |
立即开始使用
学习技能开发
建立个人品牌
评估引入
培养团队
生态合作
技能开发
社区贡献
商业机会
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| 微博 | @程序员晚枫 |
| 知乎 | @程序员晚枫 |
| 抖音 | @程序员晚枫 |
| 小红书 | @程序员晚枫 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
AI 浪潮已至,你准备好了吗?
大家好,我是正在实战各种 AI 项目的程序员晚枫。
理解常用字节码指令,看懂 dis 模块的输出。
| 指令 | 作用 |
|---|---|
| LOAD_CONST | 加载常量 |
| LOAD_FAST | 加载局部变量 |
| LOAD_GLOBAL | 加载全局变量 |
| STORE_FAST | 存储到局部变量 |
1 | import dis |
| 指令 | 作用 |
|---|---|
| BINARY_ADD | 加法 |
| BINARY_MULTIPLY | 乘法 |
| COMPARE_OP | 比较运算 |
| 指令 | 作用 |
|---|---|
| CALL_FUNCTION | 调用函数 |
| RETURN_VALUE | 返回结果 |
加载/存储指令:LOAD_FAST、STORE_FAST 等。
运算指令:BINARY_ADD、BINARY_MULTIPLY 等。
函数调用:CALL_FUNCTION、RETURN_VALUE。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:字节码执行 | 下一讲:数字类型实现 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
你是不是也想:
这份 30 天学习计划帮你:
1 | Week 1: 基础入门(安装 + 配置 + 基础技能) |
学习目标:
具体任务:
1 | # 1. 安装 |
验收标准:
学习目标:
练习技能:
1 | # 技能 1:天气查询 |
验收标准:
学习目标:
实战项目:微信自动回复
1 | # skills/wechat-reply.py |
验收标准:
学习目标:
实战项目:日报自动生成
1 | # skills/daily-report.py |
验收标准:
学习目标:
实战项目:个人知识助手
1 | # skills/knowledge-base.py |
验收标准:
学习目标:
实战项目:股票价格查询
1 | # skills/stock-price.py |
验收标准:
学习目标:
核心 API:
1 | from openclaw import Skill, trigger, cron, event |
验收标准:
学习目标:
实战项目:智能日程管理
1 | # skills/schedule-manager.py |
验收标准:
学习目标:
测试示例:
1 | # tests/test_skill.py |
验收标准:
项目选择(任选其一):
智能客服系统
个人财务助手
内容创作助手
验收标准:
学习目标:
贡献方式:
文档改进
Bug 修复
技能贡献
验收标准:
学习目标:
复盘模板:
1 | ## 30 天学习总结 |
官方资源:
社区资源:
推荐书籍:
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| 微博 | @程序员晚枫 |
| 知乎 | @程序员晚枫 |
| 抖音 | @程序员晚枫 |
| 小红书 | @程序员晚枫 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
开始你的 30 天学习之旅吧!有任何问题欢迎随时交流~
大家好,我是正在实战各种 AI 项目的程序员晚枫。
字节码如何在虚拟机中执行?理解栈式虚拟机的原理。
CPython 使用栈式虚拟机。这意味着它使用栈数据结构来管理运算过程中的临时值。
1 | // Python/ceval.c |
栈式虚拟机的工作原理:
1 | 执行 1 + 2: |
这种设计简单、可靠,是许多解释器的首选方案。
每个函数调用都会创建一个栈帧:
1 | struct _frame { |
函数调用形成栈帧链:
1 | main() → frame_1 → foo() → frame_2 → bar() → frame_3 |
当函数返回时,栈帧被弹出。
虚拟机架构:栈式虚拟机,指令分发主循环。
栈帧结构:局部变量、栈顶指针、指令指针。
函数调用:栈帧链的形成与销毁。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
← 上一讲:字节码编译 | 下一讲:常见字节码指令 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
大家好,我是正在实战各种 AI 项目的程序员晚枫。
欢迎来到《流畅的 Python》20 讲高阶编程实战课程!
本课程基于经典著作《Fluent Python》(第 2 版),带你从”会用 Python”进阶到”精通 Python”。
适合人群:
《Python 编程从入门到实践(第 3 版)》 - 零基础入门
《流畅的 Python(第 2 版)》 - 本课程配套教材
《CPython 设计与实现》 - 源码深度
学习路线: 零基础 → 《从入门到实践》 → 《流畅的 Python》 → 本门课程 → 《CPython 设计与实现》
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
开始学习:第 1 讲:Python 数据模型
大家好,我是正在实战各种 AI 项目的程序员晚枫。
一个不容忽视的事实:
这不是简单的产品迭代,而是 AI 助手赛道的范式转移。
| 指标 | 数据 |
|---|---|
| 用户增长 | 2 个月 1 亿(最快) |
| 使用场景 | 聊天、问答、写作 |
| 数据归属 | OpenAI 云端 |
| 付费模式 | 订阅制($20/月) |
| 核心优势 | 对话能力强 |
| 指标 | 数据 |
|---|---|
| Star 增长 | 日增 5000+ |
| 使用场景 | 全平台、自动化、工作流 |
| 数据归属 | 用户本地 |
| 付费模式 | 开源免费 + API 成本 |
| 核心优势 | 私有化 + 可扩展 |
1 | ChatGPT 模式: |
为什么重要:
1 | ChatGPT: |
用户价值:
1 | ChatGPT: |
关键差异:
1 | ChatGPT 生态: |
生态价值:
1 | ChatGPT: |
平台优势:
1 | 2022: GPT-3.5 发布 → 技术突破 |
| 阶段 | 核心需求 | 代表产品 |
|---|---|---|
| 好奇期 | 体验 AI 对话 | ChatGPT |
| 实用期 | 解决具体问题 | Claude |
| 深度期 | 融入工作流 | OpenClaw |
1 | 2024 年用户调研: |
| 公司 | 挑战 | 应对 |
|---|---|---|
| OpenAI | 用户流失 | 推出企业版 |
| Anthropic | 竞争加剧 | 加强 API 生态 |
| 错失机会 | 加速 Gemini 集成 | |
| Microsoft | 压力增大 | 深化 Copilot |
机会:
威胁:
技能需求变化:
| 过去 | 现在 |
|---|---|
| Prompt 工程 | 技能开发 |
| API 调用 | 系统集成 |
| 前端开发 | 工作流设计 |
| 数据分析 | AI 训练微调 |
ChatGPT 没有”死”,但它不再是未来。
就像:
OpenClaw 代表的范式:
给从业者的建议:
拥抱变化
找准定位
长期主义
学习资源:
延伸阅读:
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| 微博 | @程序员晚枫 |
| 知乎 | @程序员晚枫 |
| 抖音 | @程序员晚枫 |
| 小红书 | @程序员晚枫 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
你如何看待这次范式转移?欢迎在评论区讨论!
大家好,我是正在实战各种 AI 项目的程序员晚枫。
AST 如何变成字节码?理解 Python 代码的编译过程。
如果把 Tokenizer 比作认字,Parser 比作造句,那么 Compiler 就是把句子翻译成机器能理解的指令。这个翻译过程就是编译。
从 AST 到字节码,经历以下几个步骤:
1 | AST(抽象语法树) |
编译器首先要分析代码中的作用域:哪些是局部变量,哪些是全局变量,哪些是自由变量(闭包中使用)。
1 | # 示例代码 |
符号表记录了每个变量的作用域信息,这些信息会影响字节码的生成。
CFG 是代码的图形表示,展示了程序的执行路径:
1 | [入口] |
CFG 帮助编译器理解代码的控制流,从而生成正确的跳转指令。
遍历 CFG,为每个节点生成对应的字节码指令:
1 | # Python 代码 |
编译器会进行一些简单的优化:
1 | # 优化前 |
这种优化被称为”窥孔优化”,因为它只关注局部的、小范围的优化。
1 | import dis |
输出:
1 | 2 0 LOAD_FAST 0 (a) |
| 偏移 | 指令 | 参数 | 含义 |
|---|---|---|---|
| 0 | LOAD_FAST | 0 | 加载局部变量 a |
| 2 | LOAD_FAST | 1 | 加载局部变量 b |
| 4 | BINARY_ADD | - | 执行加法 |
| 6 | RETURN_VALUE | - | 返回结果 |
编译后的字节码保存在.pyc 文件中:
1 | __pycache__/ |
.pyc 文件包含:
通过本讲,我们理解了:
编译流程:AST→符号表→CFG→字节码→优化的完整过程。
符号表:记录变量作用域信息。
控制流图:展示程序执行路径。
字节码生成:遍历 CFG 生成指令。
查看字节码:使用 dis 模块分析字节码。
《Python 编程从入门到实践(第 3 版)》 | 《流畅的 Python(第 2 版)》 | 《CPython 设计与实现》
学习路线: 零基础 → 《从入门到实践》 → 《流畅的 Python》 → 本门课程 → 《CPython 设计与实现》
← 上一讲:语法分析与 AST 生成 | 下一讲:字节码执行 →
| 平台 | 账号/链接 |
|---|---|
| 微信 | 扫码加好友 |
| B 站 | Python 自动化办公社区 |
主营业务:AI 编程培训、企业内训、技术咨询
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true