JAVA 和Python对比
1 . 数据类型
python
Int,float,complex numbers 都没有定义到底占用多少个字节空间。都是没有取值范围,也没有无符号的情况。
JAVA
JAVA 有基础数据类型,都有确定占多少个字节
2. 全局变量
python
类似c语言,可以定义全局变量,全局的函数。
JAVA
java都要定义类才行。
3.变量声明
python
无需声明类型,直接使用。会造成一个困扰,这个变量到底是新的变量,还是旧的变量复制。不过可以用typing解决这问题,但也不是强制的,给ide看的。
JAVA
都要声明类型。
4.类和继承
python
支持多继承,可以动态的加入属性,因为属性也可以是函数的变量,也就是可以动态的加入方法。
私有属性,也不是真正的私有。保护(protect)类型也没什么用。也没有接口什么的。
如何解决二义性的问题。
Python 多继承与mro_python 多继承 二义性 函数优先级-****博客
在python中提供了__mro__内置属性来查看类的MRO , 广度优先遍历
JAVA
不支持多继承,不支持动态添加属性
5. 体现出动态语言
python
可以动态的执行字符串里边的python语句。eval() exec()。可能是不安全。类似sql注入攻击。
java
无此功能
6. 切片
7. 测试程序
python
unittest是单元测试。doctest 非常方便写在源码里,可以测试,也可以当做example,告诉别人怎么使用。
java
没有doctest
注意的坑
1.默认参数是[]的问题
Python面试题:默认参数问题_python 默认参数空列表-****博客
2. 类属性读方式有两个,写方式自有一个。
class A:
name = "aaa"
class B(A):
def get_name(self):
return B.name
def set_name(self):
B.name = "bbb"
b = B()
print(b.get_name()) # aaa 打印A的name
b.set_name() # 新增B的类属性name , 是不是很诡异哈哈
print(b.name) # bbb
print(A.name) # aaa