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" )