Python相較於Java而言,有什麼優勢?
最近在後臺,有很多的同學私聊我說,Python和Java.,哪個具有前景呢?今天我們就來簡單的講一下這兩者的區別:
我認為C, Java跟Python都是非常成功的語言, 具體選哪種看你的場景.
言歸正傳,來對比一個Python跟Java.
Python:
優點 :語法簡潔優美, 功能強大, 標準庫跟第三方庫灰常強大, 應用領域非常廣: vinta/awesome-python · GitHub(跟PHP形成宣明對比!)
語言方面, 舉幾個例子:
一切都是物件!!!
類(class本身)/函式/類方法是callable的物件
因為是物件,所以你當然可以傳來傳去啦. 比如:
class A:
def __init__(self):
print “init A”
def run(self):
print “run A”threading.Thread(target=A).start() #: 在另一個執行緒執行A()a = A()threading.Thread(target=a.run).start() #: 在另一個執行緒執行a.run() … # 驚呆沒有,這是怎麼做到的?? 也許你該看看描述符的概念
List表示式(其他好多語言也有,但是我最喜歡python的寫法):
把”1023″變成 [1, 2, 3]
[ int(x) for x in “1023” if x != “0” ]
(當前你可以用Lisp風格的: map(int, filter(lambda x: x != “0”, “1024”)))
對dict也是類似:
adict = {“a”:1, “b”:2}{k: v*2 for k, v in adict.items() }
yield關鍵字:
當你需要返回很多東西然後一個一個用的時候, 你可以一次返回一個
def xrange(n):
i = 0
while i < n:
yield i
i += 1用法:for i in xrange(10):
print i
裝飾器@:
把something_heavy()返回的結果快取起來(以函式名+args為快取的鍵值,只快取最近使用的10條)
@functool.lru_cache(10)def something_heavy(args):
#各種耗時操作…..
pass
運算子過載:
試試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標準庫和好多第三方程式碼都充斥著濃濃的設計感!!!, 各種設計模式到處可見. 從下面的語句可以看出一點來:
new BufferedInputStream(new FileInputStream(new File(“somepath”)))
尼瑪, 好多字, 看我的:
C:
fopen(“somepath”, “r”)
Python:
open(“somepath”)
Java程式碼多,但是API可複用行更強,選擇更多(我想一次讀完檔案,不要buffer呢?)
因為健壯安全,所以Java成了企業級後臺的標準. 想想銀行後臺, 關鍵地方出點bug可不得了.
缺點:
要敲好多程式碼, 參考上面的例子…
沒有Python那些奇葩特性, 靈活性不足,怎麼寫你還是Java, 而Python可以寫的像Javascript/Lisp/Matlab…..
簡單來說, Python是給人設計的(人生苦短,請用Python), C/C++更像是為機器設計的,
而Java則介於兩者之間.
相關文章
- 相對於其他技術而言,雲端計算有哪些相對的優勢?
- 學Java優勢有什麼?Java
- 相比較傳統遊戲而言,鏈遊的優勢之處有哪些?遊戲
- 講一講Java有什麼優勢?Java
- NodeJS 對於 Java 開發者而言是什麼?NodeJSJava
- RunnerGo相較於Jmeter優劣勢分析GoJMeter
- Python是什麼語言?有什麼優劣勢?Python
- Python有什麼優勢和劣勢?Python介紹!Python
- Python多執行緒是什麼意思?有什麼優勢?Python執行緒
- “Go語言”有什麼用途?有什麼優勢?Go
- 什麼是docker?docker有什麼優勢?Docker
- 細說 async/await 相較於 Promise 的優勢AIPromise
- 基於雲的專案管理有什麼優勢?專案管理
- Spark相對於Hadoop有哪些優勢?SparkHadoop
- 為什麼這麼多人學習Python,Python有哪些優勢?Python
- Solon 特性簡集,相較於 Springboot 有什麼區別?Spring Boot
- 原生IP是什麼意思?有什麼優勢?
- Python對比其他語言有什麼優劣勢?Python
- WebSocket有什麼優勢?有哪些特點?Web
- 為什麼要參加java培訓?有哪些優勢?Java
- 什麼是多執行緒?Python多執行緒有什麼優勢?執行緒Python
- 使用Python語言開發爬蟲有什麼優勢?Python爬蟲
- 學習web前端有什麼優勢?Web前端
- 好程式設計師Java培訓分享Java有什麼優勢 為什麼學的人多程式設計師Java
- BGP相對單線 雙線伺服器有什麼優勢的地方伺服器
- SFTP是什麼協議?優勢有哪些?與FTP有什麼不同?FTP協議
- Python優勢是什麼?為什麼要學習?Python
- Golang有什麼優勢?與Erlang有何差異?Golang
- Pycharm有什麼優勢?常見快捷鍵有哪些?PyCharm
- 伺服器系統有什麼優勢伺服器
- 大資料ELK有什麼優勢呢?大資料
- 預約app小程式有什麼優勢APP
- 大資料技術有什麼優勢大資料
- IPIDEA獨享代理IP是什麼,有什麼優勢?Idea
- Python語言與其他語言有什麼不同?優勢介紹Python
- 學習mysql需要什麼基礎?MySQL有什麼優勢嗎?MySql
- 資料卷是什麼?資料卷有什麼優勢嗎?
- 【知識分享】DHCP伺服器是什麼有什麼優勢伺服器