scala相對於python有何優缺點?

感覺python對函數式編程也有很好的支持,而且語法更加簡潔、優雅。

是否scala有強大的java庫支持是其最重要的優勢?


Python對函數式編程有很好的支持……?

這真不知道是哪跟哪了,難不成是因為有functiontools那堆玩意么……連個尾遞歸優化都沒有,連個不變性保護措施都沒有(Python里的不可變對象與函數式編程里的不可變數差遠了),怎麼在現有體系結構下當做實用的函數式語言?

況且Scala的賣點也不是就個函數式。講真,對比起來Scala的語言豐富程度比Python強太多了,至於庫/模塊,兩者倒是真旗鼓相當。


pip比sbt快(霧)


scala不能用上遊標卡尺!這是讓我最難受的地方!差評!好不容易為python買的遊標卡尺就這麼沒用了!


Scala最大的優勢就是強大,語法上對於很多語言能做到完全覆蓋。Python里實現的那些東西完全可以通過在Scala里造一套DSL來做到完全模擬,只是都不願意做而已。


風馬牛不相及


這個問題挖的坑有點大, 也引來了很多爭論。不該拋出這麼個禍害的。。。

作為一個三腳貓python使用者和scala初學者,實在沒有什麼自己的對比感悟。

網上搜了搜,基本上說這幾點:

1.scala 編譯成.class 運行,要比python的解釋執行快

2.擅長的領域不太一樣,scala操作spark比較好, python做數據挖掘不錯的庫支持。

關於函數式編程的特徵,有個帖子介紹的不錯:函數式編程 | | 酷 殼 - CoolShell

借用裡面介紹的特性,對比python,我們來診斷下python是否是個較為合格的函數式編程語言:

函數式編程三大特性:

1.immutable data(不可變數據)不支持數據修改值,函數得到的只是輸入數據的通過一定轉變後的新數據值

python 的int float tuple bool 類型是 immutable的 list, dict, class instance 等類型是mutable的。這點上來說python不完全滿足不可變數據的要求。然而,不可變數據雖然有線程安全的好處,對於現代編程語言來說實在太不過方便(lisp都很多方言都有賦值操作符)。python在這個方面也算有所取捨吧。

2.first class function

函數作為一等公民,可以類似於普通類型的變數一樣被傳遞。這點python應該支持的比較好

3.尾遞歸優化 在遞歸層數很深的情況下,如果對尾遞歸做優化,可以避免過龐大的棧空間。

python解釋器不支持對尾遞歸的優化。然而個人認為尾遞歸優化是解釋器(編譯器)層面的事情,並非語言使用者感受得到的特性。

綜上所述,如果把重點放在 first class function 特性上來算的話,python可以算作對函數式編程支持得較好的一個語言。


優點:靈活,有jvm的優勢,functional,嚴格的類型系統

缺點:太靈活,編譯太慢,寫著寫著就去看PL theory了。。。


Python支持函數式?

笑的我xxx都出來了。


題主幽默了


py語法制定的哲學是做一件事最好只有一種方式,scala反之。

py更適合面向對象,scala更適合函數式。

py簡單,scala複雜。

這完全是兩個極端,看你喜歡什麼,其實不適合放在一起比較。

scala跟Ruby比較可能更好一點。


函數式雖說只是一編程範式,現代編程語言或多或少都有函數式的影子,Python 有 lambda, map, filter 等支持,但用起來總覺得彆扭。Scala 在語言層面,類型系統,函數即值等方面貫徹徹底,immutable, tail recursion, pattern match,高階函數等十分自然,很符合官網所宣稱的 OO meets Functional


推薦閱讀:

為什麼這兩年函數式編程又火起來了呢?

TAG:編程語言 | Python | Java | Scala |