主页 > 手机  > 

【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南

【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南

这是一篇介绍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 // 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与Java如同水墨与工笔,演绎着截然不同的语法哲学。Python以动态类型和简洁语法著称,列表可承载万物,切片操作如诗行般优雅,一句[x**2 for x in range(10)]便能展开星辰大海;而Java坚守静态类型的严谨,ArrayList需明确定义,泛型约束如精密齿轮,每一行代码都需恪守契约。前者以缩进为律,用def轻启函数;后者以大括号为界,靠public static void郑重宣言。无论是“写意”还是“工笔”,两种语言在类型系统、代码结构和设计理念上的碰撞,恰是开发者探索效率与规范平衡的绝佳视角。

🆚 Java程序员一眼就能看出的差异点

Python特点

Java对比

举个栗子🌰

动态类型

不用声明类型,直接写列表 = [元素]

Java得写List<Integer> list = new ArrayList<>()

缩进即代码块

用4个空格代替花括号{}

Java必须用{}

包裹循环/条件体

简洁的循环语法

for num in numbers:

更接近英语表达

Java的for(int num : numbers)

稍显复杂

省分号

换行就是语句结束

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(修改即新建对象)

完全一致

原始字符串

r"..."

避免转义

无原生支持,需手动转义\\

编码处理

Python3默认UTF-8

需指定new String(bytes, "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

标签:

【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【JAVA工程师从0开始学AI】,第二步:从强类型到动态语言:Java工程师的Python语法避坑指南