石家庄网站建设招商/百度百科创建
这是一篇介绍Python语法与JAVA语法区别文章,让我们以对比的方式,来学习一下Python的语法。
首先我们看一下下面的Python代码,和具体在java 当中分别代表了什么意思
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<Integer> 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<Integer> oddNumbers = new ArrayList<>(); // ② Preparing an empty list for odd numbers (similar to Java's new ArrayList<>())// ③ This comment is like Java's // commentfor (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与Java如同水墨与工笔,演绎着截然不同的语法哲学。Python以动态类型和简洁语法著称,列表可承载万物,切片操作如诗行般优雅,一句[x**2 for x in range(10)]
便能展开星辰大海;而Java坚守静态类型的严谨,ArrayList
需明确定义,泛型约束如精密齿轮,每一行代码都需恪守契约。前者以缩进为律,用def
轻启函数;后者以大括号为界,靠public static void
郑重宣言。无论是“写意”还是“工笔”,两种语言在类型系统、代码结构和设计理念上的碰撞,恰是开发者探索效率与规范平衡的绝佳视角。
🆚 Java程序员一眼就能看出的差异点
Python特点 | Java对比 | 举个栗子🌰 |
动态类型 | 不用声明类型,直接写 | Java得写 |
缩进即代码块 | 用4个空格代替花括号 | Java必须用 包裹循环/条件体 |
简洁的循环语法 |
更接近英语表达 | Java的 稍显复杂 |
省分号 | 换行就是语句结束 | Java必须用 结尾 |
灵活的print | 直接逗号分隔多个变量打印 | Java需要 拼接字符串 |
💡 重点细节提醒(避坑指南)
- 缩进是命根子:
-
- Python靠缩进判断代码层级(像军事化管理)
- 重要的事情说三遍!!!千万别混用Tab和空格!Tab和空格!Tab和空格!建议设置编辑器:1个Tab=4个空格
- 如果缩进错乱,直接报
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的模板代码都压缩了!
数字类型:比Java更省心的数学工具
# Python数字全家桶
a = 1000 # int(Python3不分int/long)
b = 1000.12 # float
c = 1000 + 12j # complex(复数,Java没有原生支持)
🆚 Java对比表:
特性 | Python | Java |
整数长度 | 自动扩展(不会溢出) | 固定长度(int 32位,long 64位) |
类型声明 | 直接赋值自动推断 | 必须显式声明(int/long) |
复数支持 | 原生支持 | 需第三方库(如Apache Commons Math) |
除法运算 |
真除法, 整除 |
自动取整(两int相除) |
避坑指南:
- Python3没有long类型,int自动处理大数
- 想用Java式整除?用
//
操作符:
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())
Python四大核心集合类型详解
1. 列表(list)
- Java等效:
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] # 切片操作
2. 元组(tuple)
- Java等效:不可变的
ArrayList
(Java中没有直接对应) - 示例:
('apple', 'ball', 'ball')
- 关键特性:
-
- 不可变性:创建后不能修改(内存更高效)
- 有序性:元素顺序固定
- 允许重复:类似列表
- 作为字典键:因为不可变,可用作字典的键
- 特殊语法:
single_element_tuple = (42,) # 必须加逗号
empty_tuple = ()
3. 字典(dict)
- Java等效:
java.util.HashMap
- 示例:
{'fruit': 'apple', 'toy': 'ball'}
- 关键特性:
-
- 键值对存储:快速查找(O(1)时间复杂度)
- 键不可变:键必须是不可变类型(字符串/数字/元组)
- 无序性(Python 3.7前):现在保持插入顺序
- 常用操作:
inventory = {'apples': 5, 'oranges': 3}
inventory['bananas'] = 2 # 添加/修改
del inventory['oranges'] # 删除
keys = inventory.keys() # 获取所有键
4. 集合(set)
- Java等效:
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代码的基础。它们的组合使用(如字典中嵌套列表)可以构建非常复杂的数据结构,同时保持代码的简洁性。
下面特意说一个 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]
非常有意思吧。
有问题可以发邮件给我:leeborn@qq.com