这是一篇介绍Python语法与JAVA语法区别文章,让我们以对比的方式,来学习一下Python的语法。
numbers = [1,2,3,4,5,6,7,8,9] # ① 创建数字列表(像Java的ArrayList,但不用写泛型)
odd_numbers = [] # ② 准备装奇数的空列表(类似Java的 new ArrayList<>())
# ③ 这个注释就像Java的 // 注释
for num in numbers: # ④ 循环遍历,相当于Java的 for(int num : numbers)
if num % 2 != 0: # ⑤ 判断奇数(省去了Java的括号)
odd_numbers.append(num) # ⑥ 添加元素(像 list.add(num))
print ("the odd numbers are:", odd_numbers) # ⑦ 打印结果(比System.out.println省事多了)
下面的代码区为JAVA的实现方法
// This code is translated from Python to Java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List numbers = new ArrayList<>(); // ① Creating a list of numbers (like Java's ArrayList, but without generics)
for (int i = 1; i <= 9; i++) {
numbers.add(i);
}
List oddNumbers = new ArrayList<>(); // ② Preparing an empty list for odd numbers (similar to Java's new ArrayList<>())
// ③ This comment is like Java's // comment
for (int number : numbers) { // ④ Looping through, equivalent to Java's for(int num : numbers)
if (number % 2 != 0) { // ⑤ Checking for odd numbers (skipping Java's parentheses)
oddNumbers.add(number); // ⑥ Adding element (like list.add(num))
}
}
System.out.println("the odd numbers are: " + oddNumbers); // ⑦ Printing the result (much simpler than System.out.println)
}
}
在编程世界中,Python与Java如同水墨与工笔,演绎着截然不同的语法哲学。Python以动态类型和简洁语法著称,列表可承载万物,切片操作如诗行般优雅,一句[x**2 for x in range(10)]
便能展开星辰大海;而Java坚守静态类型的严谨,ArrayList
需明确定义,泛型约束如精密齿轮,每一行代码都需恪守契约。前者以缩进为律,用def
轻启函数;后者以大括号为界,靠public static void
郑重宣言。无论是“写意”还是“工笔”,两种语言在类型系统、代码结构和设计理念上的碰撞,恰是开发者探索效率与规范平衡的绝佳视角。
Python特点 |
Java对比 |
举个栗子 |
动态类型 |
不用声明类型,直接写 |
Java得写 |
缩进即代码块 |
用4个空格代替花括号 |
Java必须用 包裹循环/条件体 |
简洁的循环语法 |
更接近英语表达 |
Java的 稍显复杂 |
省分号 |
换行就是语句结束 |
Java必须用 结尾 |
灵活的print |
直接逗号分隔多个变量打印 |
Java需要 拼接字符串 |
IndentationError
(比Java的编译错误更直接)# Python添加元素
odd_numbers.append(11) # 直接append,不用考虑容量
// Java对比
oddNumbers.add(11); // 虽然也简单,但得先声明List类型
if num % 2 != 0: # 可以写成 if (num%2 !=0): 但括号非必须
# Python用井号注释单行
''' 多行注释用三引号 '''
// Java则是双斜杠
/* 多行注释 */
对比总结一下:Python代码量≈Java的1/3,但核心逻辑完全一致,就像把Java的模板代码都压缩了!
# Python数字全家桶
a = 1000 # int(Python3不分int/long)
b = 1000.12 # float
c = 1000 + 12j # complex(复数,Java没有原生支持)
特性 |
Python |
Java |
整数长度 |
自动扩展(不会溢出) |
固定长度(int 32位,long 64位) |
类型声明 |
直接赋值自动推断 |
必须显式声明(int/long) |
复数支持 |
原生支持 |
需第三方库(如Apache Commons Math) |
除法运算 |
真除法, 整除 |
自动取整(两int相除) |
避坑指南:
//
操作符:5 // 2 # 输出2(Java的 5/2 行为)
5 / 2 # 输出2.5(更符合数学直觉)
# 三种字符串写法
s1 = '单引号' # 普通字符串
s2 = u"Unicode字符串" # Python2需要u前缀,Python3默认就是
s3 = r"C:\temp\dir" # 原始字符串(正则/路径神器)
Java对比:
特性 |
Python |
Java |
引号规则 |
单/双引号等价,三引号多行 |
必须双引号,多行需 拼接 |
不可变性 |
同Java(修改即新建对象) |
完全一致 |
原始字符串 |
避免转义 |
无原生支持,需手动转义 |
编码处理 |
Python3默认UTF-8 |
需指定 |
# 文件路径(Java要写双反斜杠)
path = r"C:\Users\Project\data.txt"
# 正则表达式(避免转义地狱)
regex = r"\d+\.\d+" # 匹配数字如3.14
这个真的对比JAVA 键值太爽了! 下面是对应的 java 代码
// This code snippet is a simple file path and regex definition in Java.
String filePath = "C:\\Users\\Project\\data.txt"; // 文件路径(Java要写双反斜杠)
String regexPattern = "\\d+\\.\\d+"; // 正则表达式(避免转义地狱)匹配数字如3.14
# 自动类型提升
x = 10 + 3.14 # int + float → float
y = 10 * (1 + 2j) # int * complex → complex
# 显式转换
s = str(100) # "100"(等同Java的Integer.toString())
num = int("42") # 42(类似Java的Integer.parseInt())
java.util.ArrayList
(但Python列表更灵活)['apple', 'ball', 'ball']
append()
, remove()
, insert()
)[1, "two", 3.0, [4,5]]
是完全合法的fruits = ['apple', 'banana']
fruits.append('cherry') # 添加元素
fruits[1] = 'blueberry' # 修改元素
sub_list = fruits[1:3] # 切片操作
ArrayList
(Java中没有直接对应)('apple', 'ball', 'ball')
single_element_tuple = (42,) # 必须加逗号
empty_tuple = ()
java.util.HashMap
{'fruit': 'apple', 'toy': 'ball'}
inventory = {'apples': 5, 'oranges': 3}
inventory['bananas'] = 2 # 添加/修改
del inventory['oranges'] # 删除
keys = inventory.keys() # 获取所有键
java.util.HashSet
{'apple', 'ball'}
frozenset
)|
)、交集(&
)、差集(-
)primes = {2, 3, 5, 7}
primes.add(11) # 添加元素
evens = {2, 4, 6, 8}
common = primes & evens # 交集 {2}
特性 |
list |
tuple |
dict |
set |
可变性 |
✔️ |
❌ |
✔️ |
✔️ |
有序性 |
✔️ |
✔️ |
✔️(Python 3.7+) |
❌ |
允许重复元素 |
✔️ |
✔️ |
键唯一 |
元素唯一 |
查找速度 |
O(n) |
O(n) |
O(1) |
O(1) |
内存效率 |
较低 |
较高 |
中等 |
中等 |
list()
vs Java的new ArrayList<>()
)[]
创建列表,{}
创建字典/集合+
连接列表,in
判断成员存在mixed_list = [
42, # 整数
"hello", # 字符串
["nested", "list"], # 嵌套列表
{"key": "value"}, # 字典
lambda x: x**2 # 函数对象
]
这种灵活性虽然强大,但也需要开发者自行维护类型一致性
list
dict
tuple
set
理解这些集合类型的特性和适用场景,是写出高效Python代码的基础。它们的组合使用(如字典中嵌套列表)可以构建非常复杂的数据结构,同时保持代码的简洁性。
matrix = [[1,2,3], [4,5,6], [7,8,9]]
flatten = [num for row in matrix for num in row] # [1,2,3,4,5,6,7,8,9]
等同于下面代码
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flatten = []
for row in matrix:
for num in row:
flatten.append(num)
print(flatten) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
非常有意思吧。
有问题可以发邮件给我:[email protected]