java老程序员来学习python了,记录一下两种类型语言的区别:
Python与Java变量类型对比
python里面定义变量不需要指定变量的数据类型,并且是可以修改成其他类型java里面定义变量要指定变量的数据类型,指定以后不可以修改成其他数据类型
类型系统基础
特性 | Python | Java |
---|
类型系统 | 动态类型 (Dynamic Typing) | 静态类型 (Static Typing) |
类型检查时机 | 运行时检查 | 编译时检查 |
变量重新赋值 | 可赋值为不同类型 | 不可改变变量声明类型 |
变量声明
Python
x = 10
x = "hello"
y: int = 20
Java
int x = 10;
x = "hello";
List<String> list = new ArrayList<>();
类型严格性
情景 | Python行为 | Java行为 |
---|
类型不匹配操作 | 抛出TypeError | 编译错误 |
数字+字符串 | 5 + “3” → TypeError | 5 + “3” → “53”(隐式转换) |
类型比较 | “5” == 5 → False | “5” == 5 → 编译错误 |
面向对象差异
多态实现
Python鸭子类型:
class Duck:def quack(self): passclass Person:def quack(self): pass
def make_quack(obj):obj.quack()
Java接口继承:
interface Quackable {void quack();
}class Duck implements Quackable { ... }
void makeQuack(Quackable q) {q.quack();
}
容器类型对比
特性 | Python | Java |
---|
列表/数组 | 可混合不同类型 | 必须声明元素类型 |
泛型 | 运行时类型擦除 | 编译时泛型检查 |
典型声明 | lst = [1, “a”] | List list = … |
总结对比表
对比维度 | Python特点 | Java特点 |
---|
类型确定性 | 运行时确定 | 编译时确定 |
变量灵活性 | 可随时改变类型 | 类型固定 |
类型注解 | 可选(3.5+) | 强制声明 |
多态方式 | 鸭子类型 | 接口继承 |
错误发现时机 | 运行时 | 编译时 |
典型应用场景 | 快速开发/脚本 | 大型企业应用 |
python中的函数名称也可以当成一个变量
java用久了,很容易写出下面这种代码,在python里面运行就会报错。原来在python里面,这种操作就是将函数调用结果赋值给了函数名本身,导致原始函数被覆盖。
def hello():print("hello!")hello = hello()
hello()
python支持下面这种写法,也就是相当于将函数重命名:
def hello():print("hello!")f = hello
f()
python中函数的形参可以指定默认值,这样在调用函数的时候可以不传这个参数
def sayHello(name="world"):print("hello,", name)sayHello()
python中的函数实参传递支持按参数名称传参
def sayHello(name="world", age=20):print("hello,", name, "age:", age)sayHello(age=18, name="mary")