Python for Java Developers¶
你已经是一名合格的 Java 工程师。这本教程不再教你"什么是变量",而是帮你把已有的 Java 心智模型,映射到 Python——并在该抛弃 Java 习惯的地方,果断抛弃。
这是一份对比驱动的核心教程:每个知识点都走四步——
① Java 对照 → ② 语义差异 → ③ 为什么不同 → ④ Pythonic 正解
目标只有一个:让你能独立用 Python 干活,且不写出"用 Python 语法写的 Java 代码"。
这本教程面向谁¶
资深 Java 开发者,熟悉 OOP、泛型、异常、并发、构建工具,但 Python 几乎是白纸。
不面向:Python 老手(你会觉得太基础)、零编程基础的新手(这里默认你懂编程)。
怎么读¶
每一章都会频繁出现下面这些组件,先认识它们:
① Java / Python 并排对比¶
左右分栏,一眼看出差异:
-
Java
-
Python
② 陷阱高亮¶
把 Java 习惯硬套到 Python 会踩的坑,用警告块标出:
⚠️ Java 程序员的陷阱
在 Java 里 == 比较引用、.equals() 比较内容;在 Python 里 == 比较内容、is 比较身份(引用)。习惯用错会埋下隐蔽 bug。
③ Pythonic 正解¶
告诉你"在 Python 里该怎么写",而不是"翻译过来的 Java":
Pythonic 写法
不要写 for (int i = 0; i < list.size(); i++)。Python 直接 for item in list:,要索引就 for i, item in enumerate(list):。
④ 每章练习¶
每章末尾有折叠的练习题和参考答案(答案见仓库 solutions/,可运行):
练习(示例)
用 Pythonic 方式:把一个字符串列表里所有元素转成小写并去重,结果按字母序排列。
先建立三个核心心智转换¶
在深入语法之前,先放下三个 Java 固执,否则后面处处拧巴:
1. 动态强类型 + 一切皆对象¶
Python 没有 int vs Integer 的原始/包装之分,数字、函数、类、模块全都是对象。类型在运行时确定,但强类型意味着 "a" + 1 会报错(不像 JavaScript 悄悄转换)。
2. 鸭子类型 + Protocol(结构化类型)¶
Java 靠 nominal 的 interface(必须显式 implements)。Python 靠鸭子类型:"如果它走起来像鸭子、叫起来像鸭子,那它就是鸭子"。要静态约束就用 Protocol(结构化类型,第 8 章详讲)。
-
Java:必须声明实现
-
Python:有方法就行
3. 没有 checked exceptions¶
Python 没有 throws 声明,异常是控制流的常规部分。try/except 的地位远比 Java 的 try/catch 高,且多了 else 和 finally 的精细控制(第 5 章)。
还有更多差异
- 函数是一等公民:可以赋值、传参、返回(Java 要靠函数式接口/lambda 绕一圈)
- 包/模块 vs Java 的 package + classpath:
import机制完全不同(第 6 章) - GIL:CPython 的全局解释器锁,让多线程无法真正并行 CPU(第 11 章,资深 Java 并发选手的必修课)
环境准备¶
本教程推荐用 uv(Rust 写的、极快的现代工具链,最接近 Maven/Gradle 的"一站式"体验)。传统 pip + venv 也完全支持——第 10 章会两条路并行讲解。
# 方式一(推荐):uv
uv run python your_script.py
# 方式二:传统 pip + venv
python -m venv .venv
.venv/Scripts/activate # Windows(macOS/Linux 用 source .venv/bin/activate)
pip install <package>
代码示例在仓库 examples/,贯穿项目在 project/,都可直接 clone 运行。
章节导览¶
| 章 | 主题 | 关键 Java 对照 |
|---|---|---|
| 1 | 语法快速对照 | 基本类型、for/switch、字符串、集合 |
| 2 | 函数 | 方法、可变参数、lambda、闭包 |
| 3 | 数据模型 | 值/引用、==/equals、Integer 缓存 |
| 4 | OOP | 类、继承、interface、record、运算符重载 |
| 5 | 异常 | try/catch、checked exceptions |
| 6 | 模块与包 | package、classpath、import |
| 7 | Pythonic 惯用法 | Stream、try-with-resources、注解 |
| 8 | 类型提示 | 泛型、Optional、interface |
| 9 | 标准库对照速查 | java.util/java.time/java.nio 等 |
| 10 | 工程化基础 | Maven/Gradle、JUnit、日志 |
| 11 | 并发模型 | Thread、锁、CompletableFuture |
| 12 | 常见陷阱 | 反 Java 习惯清单 |
| 13 | 贯穿项目实战 | 用纯标准库写一个 CLI 工具 |
| 14 | 进阶路线图 | 下一步学什么 |
进阶 · Web 后端(FastAPI + pydantic)¶
贯穿项目
bookmarks-api:一个带数据库、认证、测试的 REST API。详见 进阶 1。
| 章 | 主题 | 关键 Java 对照 |
|---|---|---|
| 进阶 1 | pydantic v2 | DTO + Bean Validation + Jackson |
| 进阶 2 | FastAPI 核心与异步 | Spring Boot(类型驱动) |
| 进阶 3 | 持久化与认证 | JPA/Hibernate + Spring Security |
| 进阶 4 | 测试与部署 | MockMvc + Tomcat/部署 |
进阶 · 工程化与部署(uv / pip / 打包 / Docker)¶
贯穿项目:
logstats(发 PyPI)+bookmarks-api(Docker 部署)。详见 进阶 1。
| 章 | 主题 | 关键 Java 对照 |
|---|---|---|
| 进阶 1 | 环境与版本管理 | 全局 JDK / pyenv |
| 进阶 2 | 依赖与包管理 | Maven 依赖 + 锁定 |
| 进阶 3 | 配置与 .env | @ConfigurationProperties / @Profile |
| 进阶 4 | 打包发布与部署 | Maven deploy / Docker |
进阶 · 异步深入¶
asyncio机制、并发控制、同步原语、陷阱。详见 异步 1。
| 章 | 主题 |
|---|---|
| 异步 1 | 事件循环与协程机制 |
| 异步 2 | 并发控制(gather / TaskGroup / 同步原语) |
| 异步 3 | 进阶模式与陷阱 |
进阶 · 数据科学(NumPy / Pandas)¶
Python 的统治领域(Java 无等价物)。详见 数据科学 1。
| 章 | 主题 |
|---|---|
| 数据科学 1 | NumPy(数组、向量化、广播) |
| 数据科学 2 | Pandas(DataFrame,对照 SQL) |
| 数据科学 3 | 可视化(matplotlib) |
准备好了?从 第 1 章 · 语法快速对照 开始;若已掌握核心,按需选 Web 后端、工程化与部署、异步深入 或 数据科学。