01 - 基础篇:Python 语言强化
为阅读 Dify 源码打下坚实的 Python 基础
📖 章节概述
本章节专为有 JavaScript/TypeScript 背景但 Python 经验不足的开发者设计。我们将系统学习 Python 核心语法、高级特性、异步编程和项目管理工具,为后续深入 Dify 源码打下坚实基础。
🎯 学习目标
- 掌握 Python 核心语法和数据结构
- 理解 Python 面向对象编程
- 熟悉装饰器、生成器等高级特性
- 掌握 async/await 异步编程
- 学会使用 poetry 和 uv 管理 Python 项目
📚 内容导航
01 - Python 核心语法和特性 ✅
学习时长:3-4 天
难度:⭐⭐
从 JS/TS 开发者的视角学习 Python 基础语法,重点对比两种语言的差异:
- Python vs JavaScript 基础对比(变量、类型、运算符)
- 数据类型详解(数字、字符串、布尔、None)
- 数据结构(列表、元组、字典、集合)
- 控制流(if-elif-else、for、while)
- 函数定义和各种参数类型
- 面向对象编程(类、继承、属性)
- 模块和包管理
- 异常处理
实践项目:
- 用 Python 重写熟悉的 JS 工具函数
- 阅读 Dify 的
libs/helper.py工具类 - 实现 debounce、deep_clone、flatten 等函数
02 - Python 高级特性 ✅
学习时长:3-4 天
难度:⭐⭐⭐
深入学习 Python 的高级特性,这些在 Dify 源码中大量使用:
- 装饰器深入(函数装饰器、类装饰器、带参数的装饰器)
- 生成器和迭代器(yield、生成器表达式、迭代器协议)
- 上下文管理器(
__enter__/__exit__、@contextmanager) - 推导式(列表、字典、集合推导式)
- 类型提示(Type Hints、泛型、Protocol)
- 魔术方法(
__add__、__getitem__、__call__等)
实践项目:
- 分析 Dify 中的装饰器:
@login_required、@timing - 实现自定义装饰器(重试、超时、日志)
- 创建性能监控上下文管理器
03 - 异步编程和并发 ✅
学习时长:2-3 天
难度:⭐⭐⭐⭐
理解 Python 的异步编程模型,对比 JS 的 Promise/async-await:
- 同步 vs 异步对比(Python vs JavaScript)
- 协程基础(async/await、协程状态)
- asyncio 核心(事件循环、Task、gather/wait)
- 异步 HTTP 请求(httpx、流式响应)
- 异步生成器和迭代器
- 并发 vs 并行的区别
- GIL(全局解释器锁)的影响
- 多线程和多进程
实践项目:
- 实现异步网络爬虫
- 实现异步队列处理系统
- 分析 Dify 的异步模型调用
04 - Python 项目管理 ✅
学习时长:1-2 天
难度:⭐⭐
学习 Python 项目的依赖管理和开发工具:
- Python 包管理发展历程(pip → Poetry → uv)
- Poetry 详解
- pyproject.toml 配置详解
- 依赖管理和版本约束
- 虚拟环境自动管理
- poetry.lock 锁文件
- uv 包管理器(极速)
- uv vs Poetry 对比
- uv.lock 文件
- Dify 的 uv 使用
- 虚拟环境深入(venv、virtualenv、pyenv)
- Dify 项目分析和环境搭建
实践项目:
- 创建完整的 Python 项目
- 迁移 requirements.txt 到 Poetry
- 搭建 Dify 开发环境完整流程
💡 学习建议
对于 JS/TS 开发者
- 对比学习:在学习每个概念时,主动对比 Python 和 JavaScript 的异同
- 类型思维:习惯 Python 的动态类型,但建议使用 Type Hints
- 缩进敏感:Python 使用缩进而非花括号,养成良好的代码格式习惯
- 生态差异:理解 Python 包管理与 npm/pnpm 的不同
学习路径建议
Day 1-2: Python 基础语法 + 数据类型
Day 3-4: 面向对象 + 模块管理
Day 5-6: 装饰器 + 生成器 + 上下文管理器
Day 7-8: 异步编程基础
Day 9-10: asyncio 深入 + 并发模型
Day 11-12: poetry/uv 项目管理
Day 13-14: 实践:搭建 Dify 环境 + 代码阅读推荐资源
🎓 自测题
完成本章节后,你应该能够回答以下问题:
- Python 的
None、[]、{}在布尔上下文中的表现? *args和**kwargs的区别和使用场景?- 装饰器的本质是什么?如何传递参数给装饰器?
- 生成器和普通函数的区别?
yield关键字的作用? - Python 中的 GIL 是什么?对并发编程有什么影响?
async/await和多线程的区别?- poetry 和 pip 的依赖管理有什么不同?
✅ 完成标志
- [ ] 能够流畅阅读 Dify 的 Python 代码
- [ ] 理解 Dify 中使用的装饰器和上下文管理器
- [ ] 能够使用 poetry 管理 Python 项目
- [ ] 成功搭建 Dify 本地开发环境
- [ ] 完成至少 3 个 Python 实践小项目
下一步:完成本章节后,进入 02-架构篇,开始学习 Dify 的整体架构设计。