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 多繼承 二義性 函數優先級-CSDN博客
在python中提供了__mro__內置屬性來查看類的MRO , 廣度優先遍歷
JAVA
不支持多繼承,不支持動態添加屬性
5. 體現出動態語言
python
可以動態的執行字符串里邊的python語句。eval() exec()。可能是不安全。類似sql注入攻擊。
java
無此功能
6. 切片
7. 測試程序
python
unittest是單元測試。doctest 非常方便寫在源碼里,可以測試,也可以當做example,告訴別人怎么使用。
java
沒有doctest
注意的坑
1.默認參數是[]的問題
Python面試題:默認參數問題_python 默認參數空列表-CSDN博客
2. 類屬性讀方式有兩個,寫方式自有一個。
class A:name = "aaa"class B(A):def get_name(self):return B.namedef 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