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) : pass class 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" )