1. 程式人生 > >Python 相較於Java 而言,有什麼優勢?

Python 相較於Java 而言,有什麼優勢?

作為一個數年C/Java/Python混合開發者, 我談談我的感受

.我認為C, Java跟Python都是非常成功的語言, 具體選哪種看你的場景.

言歸正傳,來對比一個Python跟Java.

Python:

優點 ( 知乎怎麼不能把這行字變大點??):

語法簡潔優美, 功能強大, 標準庫跟第三方庫灰常強大, 應用領域非常廣: vinta/awesome-python · GitHub(跟PHP形成宣明對比!)

語言方面, 舉幾個例子:

一切都是物件!!!類

(class本身)/函式/類方法是callable的物件

因為是物件,所以你當然可以傳來傳去啦. 比如: 在這裡插入圖片描述 List表示式(其他好多語言也有,但是我最喜歡python的寫法):

把"1023"變成 [1, 2, 3]在這裡插入圖片描述 (當前你可以用Lisp風格的: map(int, filter(lambda x: x != “0”, “1024”)))

對dict也是類似: 在這裡插入圖片描述 yield關鍵字:

當你需要返回很多東西然後一個一個用的時候, 你可以一次返回一個在這裡插入圖片描述 裝飾器@:

把something_heavy()返回的結果快取起來(以函式名+args為快取的鍵值,只快取最近使用的10條) 在這裡插入圖片描述 運算子過載:

試試numpy, 你會驚呆的, 操作向量/矩陣跟基本型別一樣方便

缺點:

目測python是最慢的指令碼語言,比V8上的JS還慢不少. (研究一下描述符,你會發現python呼叫物件方法的開銷好大!)

但是python創始人說了, 一般程式的瓶頸在於20%的程式碼, 所以你可以把那20%的程式碼用C重寫(而python是膠水語言,用C重寫部分程式碼當然很easy啦)

同時,你可以試試PyPy, 引入了JIT技術

動態型別

有人說: 動態型別寫時爽, 重構起來是災難(原諒我記不得原話…)

對於不寫unittest, 不做程式碼覆蓋率測試的人來說, 動態語言當然是危險的, 拼寫錯誤都可能被隱藏, 重構?別搗亂!

python創始人有話說: “如果你認為編譯器可以幫你解決所有問題,那你一定幹程式設計沒多久” (鄙人深有體會,曾經年少輕狂的我非常鄙視javascript), “不管什麼程式,都需要寫testcase, 既然要寫testcase, 那麼動態型別不是問題!”

在此推薦大家兩個工具: py.test python-coverage

Java:

優點

用幾個詞形容一下Java語言: 優美, 嚴謹, 健壯,不易出錯.

當然, 使用也非常的廣泛: 常年盤踞程式設計人員數量排行榜第一名! 各種庫也灰常多: akullpp/awesome-java · GitHub 同樣的程式碼, 相比C++(甚至python), Java程式碼出BUG的概率要小點(當然,寫的時候一般會比python長).

Java從語言設計上儘量避免了程式設計師犯錯, 比如自動垃圾回收, 拋棄無符號型別, 安全的列舉, 編譯期泛型檢查(Java1.5之後加入的泛型,但是隻是用來做編譯器檢查,執行時跟以前一樣), 強制的異常處理(遇到異常必須catch或者申明throws) 等等(當然,某些特性python也有.)

Java標準庫和好多第三方程式碼都充斥著濃濃的設計感!!!, 各種設計模式到處可見. 從下面的語句可以看出一點來: 在這裡插入圖片描述 尼瑪, 好多字, 看我的:

C: 在這裡插入圖片描述 Python: 在這裡插入圖片描述 Java程式碼多,但是API可複用行更強,選擇更多(我想一次讀完檔案,不要buffer呢?)

因為健壯安全,所以Java成了企業級後臺的標準. 想想銀行後臺, 關鍵地方出點bug可不得了.

缺點:

要敲好多程式碼, 參考上面的例子…

沒有Python那些奇葩特性, 靈活性不足,怎麼寫你還是Java, 而Python可以寫的像Javascript/Lisp/Matlab…

簡單來說, Python是給人設計的(人生苦短,請用Python), C/C++更像是為機器設計的, 而Java則介於兩者之間.

如果你是高手, 寫出的程式碼沒什麼bug, 也不用怎麼除錯, 那推薦你用python(前提是他的慢你能忍受. 當然,高手眼裡, 他會的就是最好的…)如果你寫的程式碼bug多,大部分時間在除錯程式碼,你可能需要了解一下Java, 或者寫足夠多的testcase.

文章結尾給想學java的同學發一波福利,這是我用5年的經驗總結出的一套專門針對零基礎想學java的學習資料,由於平臺上無法傳輸檔案,需要的可以加我企鵝:578911077我將免費贈送。

今天就分享到這裡,大家記得點贊收藏,分享轉發,關注小編哦!