跳转至

Python for Java Developers

你已经是一名合格的 Java 工程师。这本教程不再教你"什么是变量",而是帮你把已有的 Java 心智模型,映射到 Python——并在该抛弃 Java 习惯的地方,果断抛弃。

这是一份对比驱动的核心教程:每个知识点都走四步——

① Java 对照 → ② 语义差异 → ③ 为什么不同 → ④ Pythonic 正解

目标只有一个:让你能独立用 Python 干活,且不写出"用 Python 语法写的 Java 代码"


这本教程面向谁

资深 Java 开发者,熟悉 OOP、泛型、异常、并发、构建工具,但 Python 几乎是白纸

不面向:Python 老手(你会觉得太基础)、零编程基础的新手(这里默认你懂编程)。


怎么读

每一章都会频繁出现下面这些组件,先认识它们:

① Java / Python 并排对比

左右分栏,一眼看出差异:

  • Java

    // 静态强类型,必须声明
    String name = "Alice";
    final int MAX = 100;
    
  • Python

    # 动态类型,无需声明
    name = "Alice"
    MAX = 100  # 约定常量全大写,语言不强制
    

② 陷阱高亮

把 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 方式:把一个字符串列表里所有元素转成小写并去重,结果按字母序排列。

参考答案
words = ["Banana", "apple", "banana", "Apple"]
result = sorted({w.lower() for w in words})
# ['apple', 'banana']

先建立三个核心心智转换

在深入语法之前,先放下三个 Java 固执,否则后面处处拧巴:

1. 动态强类型 + 一切皆对象

Python 没有 int vs Integer 的原始/包装之分,数字、函数、类、模块全都是对象。类型在运行时确定,但强类型意味着 "a" + 1 会报错(不像 JavaScript 悄悄转换)。

2. 鸭子类型 + Protocol(结构化类型)

Java 靠 nominalinterface(必须显式 implements)。Python 靠鸭子类型:"如果它走起来像鸭子、叫起来像鸭子,那它就是鸭子"。要静态约束就用 Protocol(结构化类型,第 8 章详讲)。

  • Java:必须声明实现

    interface Quacker { void quack(); }
    
    class Duck implements Quacker {
        public void quack() { /* ... */ }
    }
    
  • Python:有方法就行

    class Duck:
        def quack(self): ...
    
    # 任何有 quack() 方法的对象都能用
    def make_sound(x): x.quack()
    

3. 没有 checked exceptions

Python 没有 throws 声明,异常是控制流的常规部分。try/except 的地位远比 Java 的 try/catch 高,且多了 elsefinally 的精细控制(第 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 数据模型 值/引用、==/equalsInteger 缓存
4 OOP 类、继承、interfacerecord、运算符重载
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 后端工程化与部署异步深入数据科学