Python 与 Java 语法差异对照指南
本文针对 Java 开发者提供 Python 语法迁移指南。内容涵盖基础结构、变量类型、运算符、字符串处理、流程控制、函数定义、面向对象、数据结构及异常处理等核心语法的详细对照。通过大量代码示例展示 Java 与 Python 在写法上的关键差异,如缩进规则、动态类型、内置函数及集合操作等。同时总结了 Java 转 Python 时的常见陷阱,如可变默认参数、索引访问方式及循环逻辑等,帮助开发者快速适应 Python 编程风格。

本文针对 Java 开发者提供 Python 语法迁移指南。内容涵盖基础结构、变量类型、运算符、字符串处理、流程控制、函数定义、面向对象、数据结构及异常处理等核心语法的详细对照。通过大量代码示例展示 Java 与 Python 在写法上的关键差异,如缩进规则、动态类型、内置函数及集合操作等。同时总结了 Java 转 Python 时的常见陷阱,如可变默认参数、索引访问方式及循环逻辑等,帮助开发者快速适应 Python 编程风格。

你如果会 Java,这篇文章就按'Java 写法 → Python 写法 → 一句话解释'来走。每一节都是具体语法对照,不讲空话,不考试,不绕概念。看完你就能把 Java 习惯直接迁移到 Python。
本文重点:写法对照 + 常见坑 + 迁移小技巧。所有示例都尽量贴近真实开发。
Java 有 class 和 main,Python 直接写语句。
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
print("Hello, World!")
一句话理解:Python 直接跑脚本,不需要 main。
Java 变量必须写类型,Python 不用写。
int a = 10;
String name = "Tom";
a = 10
name = "Tom"
一句话理解:Python 变量就是'贴标签的盒子',标签可以换。
常见运算对照:
int a = 7 / 2; // 3
int b = 7 % 2; // 1
double c = Math.pow(2, 3); // 8.0
a = 7 // 2 # 3
b = 7 % 2 # 1
c = 2 ** 3 # 8
一句话理解:Python 用 // 表示整除,用 ** 表示幂。
Java 常见写法:+ 或 String.format;Python 最推荐 f-string。
String name = "Tom";
int age = 18;
String s1 = "name=" + name + ", age=" + age;
String s2 = String.format("name=%s, age=%d", name, age);
name = "Tom"
age = 18
s1 = "name=" + name + ", age=" + str(age)
s2 = f"name={name}, age={age}"
一句话理解:Python 里拼字符串优先用 f,又短又清晰。
Java:小括号 + 大括号;Python:冒号 + 缩进。
if (score >= 60) {
System.out.println("pass");
} else {
System.out.println("fail");
}
if score >= 60:
print("pass")
else:
print("fail")
一句话理解:Python 靠缩进分块,缩进对齐就是同一层。
Java 经典 for(i=0;i<10;i++),Python 用 range。
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
for i in range(10):
print(i)
一句话理解:range(10) 就是 0~9。
遍历数组/集合时:
for (String s : list) {
System.out.println(s);
}
for s in lst:
print(s)
一句话理解:Python 直接遍历元素。
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
i = 0
while i < 5:
print(i)
i += 1
一句话理解:Python 没有 i++,用 i += 1。
Java 有 switch;Python 3.10+ 用 match。
switch (x) {
case 1:
System.out.println("one");
break;
default:
System.out.println("other");
}
match x:
case 1:
print("one")
case _:
print("other")
一句话理解:match 更像'更好看的 switch'。
Java:写在 class 里;Python:可直接写函数。
public int add(int a, int b) {
return a + b;
}
def add(a, b):
return a + b
一句话理解:Python 不写类型,不写 public。
默认参数 / 可变参数对照:
def add(a, b=0):
return a + b
def sum_all(*nums):
return sum(nums)
一句话理解:Java 用重载;Python 用默认参数更方便。
class User {
private String name;
public User(String name) { this.name = name; }
public String hello() { return "Hi " + name; }
}
User u = new User("Tom");
System.out.println(u.hello());
class User:
def __init__(self, name):
self.name = name
def hello(self):
return f"Hi {self.name}"
u = User("Tom")
print(u.hello())
一句话理解:Python 的 self 就是 Java 的 this。
Java ArrayList 对应 Python list。
List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
int x = nums.get(0);
nums = []
nums.append(1)
nums.append(2)
x = nums[0]
一句话理解:Python 取元素用 [],不用 get。
Java 的 Map,对应 Python 的 dict。
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
int v = map.get("a");
mp = {}
mp["a"] = 1
v = mp["a"]
一句话理解:Python 直接用 [] 读写。
Set<Integer> s = new HashSet<>();
s.add(1);
s.add(1); // 不重复
s = set()
s.add(1)
s.add(1)
一句话理解:Python set 就是 HashSet。
Java 里常用 for + add;Python 有更短写法。
List<Integer> out = new ArrayList<>();
for (int n : nums) {
out.add(n * n);
}
out = [n * n for n in nums]
一句话理解:Python 用一行写'遍历 + 处理'。
try {
int x = 1 / 0;
} catch (ArithmeticException e) {
System.out.println(e);
} finally {
System.out.println("done");
}
try:
x = 1 / 0
except ZeroDivisionError as e:
print(e)
finally:
print("done")
一句话理解:写法不同,但思路一样。
String text = Files.readString(Path.of("a.txt"), StandardCharsets.UTF_8);
Files.writeString(Path.of("b.txt"), text, StandardCharsets.UTF_8);
with open("a.txt", "r", encoding="utf-8") as f:
text = f.read()
with open("b.txt", "w", encoding="utf-8") as f:
f.write(text)
一句话理解:Python 用 with 自动关文件。
Java 用 package + import,Python 用 import / from。
import com.demo.utils.MathUtil;
from utils import math_util
一句话理解:Python 的包就是文件夹。
场景 1:字符串是否为空
if (str == null || str.isEmpty()) {
System.out.println("empty");
}
if not s:
print("empty")
场景 2:遍历 Map
for (Map.Entry<String, Integer> e : map.entrySet()) {
System.out.println(e.getKey() + ":" + e.getValue());
}
for k, v in mp.items():
print(f"{k}:{v}")
场景 3:排序
Collections.sort(list);
lst.sort()
场景 4:倒序
Collections.reverse(list);
lst.reverse()
场景 5:过滤
List<Integer> out = new ArrayList<>();
for (int x : nums) {
if (x > 10) out.add(x);
}
out = [x for x in nums if x > 10]
场景 6:分割字符串
String[] parts = s.split(",");
parts = s.split(",")
场景 7:字符串替换
String t = s.replace("a", "b");
t = s.replace("a", "b")
场景 8:去重
Set<Integer> set = new HashSet<>(list);
set_obj = set(lst)
场景 9:判断元素是否存在
if (list.contains(x)) { ... }
if x in lst:
...
场景 10:获取长度
int n = list.size();
n = len(lst)
如果你之前写 Java,很容易把'类型 + 访问修饰符 + 结构'当成必须,但 Python 更强调'能跑 + 可读'。因此建议你先把 Java 的思维改成:先写出能跑的版本,再考虑结构与重构。
实际开发中,Python 的写法会更短,但一旦规模变大,也需要像 Java 一样做模块化、分层和规范命名。只不过入口更简单,语法更直观。
如果你习惯了 Java 的 IDE 提示,也可以给 Python 加类型提示(type hints),这样编辑器也能提示类型。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online