RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

scala和python的優(yōu)缺點(diǎn)_scala和python對(duì)比分析哪個(gè)好?

h1654155282.3538 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 2018-03-23 13:59 ? 次閱讀

scala簡(jiǎn)介

Scala是一門多范式的編程語(yǔ)言,一種類似java的編程語(yǔ)言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語(yǔ)言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。

scala的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

Scala = haskell (for,yield = do notation)+ ocaml((object + trait)實(shí)現(xiàn)module system,這里注意是trait而不是object 關(guān)鍵詞 實(shí)現(xiàn)first class module。如果再加上Path depentent type 就更強(qiáng)大了) + object oriented(函數(shù)也被當(dāng)作Object) + 、、,是一門非常復(fù)雜的語(yǔ)言,但同時(shí)也是最實(shí)用的函數(shù)式語(yǔ)言,生態(tài)很豐富,web 有play,akka-http,數(shù)據(jù)庫(kù)有Slick(為Sql數(shù)據(jù)庫(kù)提供了極端簡(jiǎn)潔的使用方式),深度學(xué)習(xí)可以直接調(diào)java 的dl4j,還能通過(guò)scalajs編譯到JS。scala 其實(shí)是很純的面向?qū)ο笳Z(yǔ)言(函數(shù)也是object),確還能當(dāng)成函數(shù)式語(yǔ)言使用,不得不贊賞其精妙!

缺點(diǎn):

特性太多學(xué)習(xí)曲線很陡峭,主要是加入了Subtyping、path dependent type 等造成類型系統(tǒng)復(fù)雜,而語(yǔ)法其實(shí)不算復(fù)雜。還有就是類型系統(tǒng)Unsound(不清楚這個(gè)有什么影響),類型推導(dǎo)不如Haskell的HM 類型系統(tǒng),加類型標(biāo)記的時(shí)候比HM type system 多

python簡(jiǎn)介

Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。Python 的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語(yǔ)言經(jīng)常使用英文關(guān)鍵字,其他語(yǔ)言的一些標(biāo)點(diǎn)符號(hào),它具有比其他語(yǔ)言更有特色語(yǔ)法結(jié)構(gòu)。

python的優(yōu)缺點(diǎn)

python語(yǔ)言的優(yōu)點(diǎn)

1、作為初學(xué)python的科班出身的小白,python非常簡(jiǎn)單,非常適合人類閱讀。閱讀一個(gè)良好的Python程序就感覺(jué)像是在讀英語(yǔ)一樣,盡管這個(gè)英語(yǔ)的要求非常嚴(yán)格!Python的這種偽代碼本質(zhì)是它最大的優(yōu)點(diǎn)之一。它使你能夠?qū)W⒂诮鉀Q問(wèn)題而不是去搞明白語(yǔ)言本身。

2、易學(xué)。python雖然是用c語(yǔ)言寫的,但是它擯棄了c中非常復(fù)雜的指針,簡(jiǎn)化了python的語(yǔ)法。

3、Python是FLOSS(自由/開放源碼軟件)之一。簡(jiǎn)單地說(shuō),你可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。Python希望看到一個(gè)更加優(yōu)秀的人創(chuàng)造并經(jīng)常改進(jìn)。

4、可移植性————由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就可以在下述任何平臺(tái)上面運(yùn)行。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至還有PocketPC、Symbian以及Google基于linux開發(fā)的Android平臺(tái)!

5、在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。事實(shí)上,由于你不再需要擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫(kù)等等,所有這一切使得使用Python更加簡(jiǎn)單。由于你只需要把你的Python程序拷貝到另外一臺(tái)計(jì)算機(jī)上,它就可以工作了,這也使得你的Python程序更加易于移植。

6、Python既支持面向過(guò)程的函數(shù)編程也支持面向?qū)ο蟮某橄缶幊?。在面向過(guò)程的語(yǔ)言中,程序是由過(guò)程或僅僅是可重用代碼的函數(shù)構(gòu)建起來(lái)的。在面向?qū)ο蟮恼Z(yǔ)言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來(lái)的。與其他主要的語(yǔ)言如C++和Java相比,Python以一種非常強(qiáng)大又簡(jiǎn)單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>

7、可擴(kuò)展性和可嵌入性。如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然后在你的Python程序中使用它們。你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

8、豐富的庫(kù)。Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。python有可定義的第三方庫(kù)可以使用。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。

9、Python確實(shí)是一種十分精彩又強(qiáng)大的語(yǔ)言。它合理地結(jié)合了高性能與使得編寫程序簡(jiǎn)單有趣的特色。

10、規(guī)范的代碼。Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。

python語(yǔ)言的缺點(diǎn)

很多時(shí)候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無(wú)此限制,可以較為方便的在shell下完成簡(jiǎn)單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€(gè).py文件。(對(duì)很多用戶而言這也不算是限制)

⑴運(yùn)行速度,有速度要求的話,用C++改寫關(guān)鍵部分吧。不過(guò)對(duì)于用戶而言,機(jī)器上運(yùn)行速度是可以忽略的。因?yàn)橛脩舾靖杏X(jué)不出來(lái)這種速度的差異。

⑵既是優(yōu)點(diǎn)也是缺點(diǎn),python的開源性是的Python語(yǔ)言不能加密,但是目前國(guó)內(nèi)市場(chǎng)純粹靠編寫軟件賣給客戶的越來(lái)越少,網(wǎng)站和移動(dòng)應(yīng)用不需要給客戶源代碼,所以這個(gè)問(wèn)題就是問(wèn)題了。國(guó)隨著時(shí)間的推移,很多國(guó)內(nèi)軟件公司,尤其是游戲公司,也開始規(guī)模使用他。

⑶ 構(gòu)架選擇太多(沒(méi)有像C#這樣的官方.net構(gòu)架,也沒(méi)有像ruby由于歷史較短,構(gòu)架開發(fā)的相對(duì)集中。Ruby on Rails 構(gòu)架開發(fā)中小型web程序天下無(wú)敵)。不過(guò)這也從另一個(gè)側(cè)面說(shuō)明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多。

scala和python對(duì)比分析哪個(gè)好

scala和python到底哪個(gè)更好呢?接下來(lái)小編基于Spark環(huán)境詳細(xì)的對(duì)比分析一下這兩種語(yǔ)言,哪款更好一看便知。

1、性能對(duì)比

由于Scala是基于JVM的數(shù)據(jù)分析和處理,Scala比Python快10倍。當(dāng)編寫Python代碼用且調(diào)用Spark庫(kù)時(shí),性能是平庸的,但如果程序涉及到比Python編碼還要多的處理時(shí),則要比Scala等效代碼慢得多。Python解釋器PyPy內(nèi)置一個(gè)JIT(及時(shí))編譯器,它很快,但它不提供各種Python C擴(kuò)展支持。在這樣的情況下,對(duì)庫(kù)的C擴(kuò)展CPython解釋器優(yōu)于PyPy解釋器。

使用Python在Spark的性能開銷超過(guò)Scala,但其重要性取決于您在做什么。當(dāng)內(nèi)核數(shù)量較少時(shí),Scala比Python快。隨著核數(shù)的增加,Scala的性能優(yōu)勢(shì)開始縮小。

當(dāng)大量的處理其工作時(shí),性能不是選擇編程語(yǔ)言的主要驅(qū)動(dòng)因素。然而,當(dāng)有重要的處理邏輯時(shí),性能是一個(gè)主要因素,Scala絕對(duì)比Python提供更好的性能,用于針對(duì)Spark程序。

2、學(xué)習(xí)曲線

在用Scala語(yǔ)言編寫Spark程序時(shí)有幾個(gè)語(yǔ)法糖,所以大數(shù)據(jù)專業(yè)人員在學(xué)習(xí)Spark時(shí)需要非常小心。程序員可能會(huì)發(fā)現(xiàn)Scala語(yǔ)法有時(shí)會(huì)讓人發(fā)瘋。Scala中的一些庫(kù)很難定義隨機(jī)的符號(hào)運(yùn)算符,而這些代碼可以由沒(méi)有經(jīng)驗(yàn)的程序員理解。在使用Scala時(shí),開發(fā)人員需要關(guān)注代碼的可讀性。與Scala相比,Java或Python是一個(gè)靈活的語(yǔ)法復(fù)雜的語(yǔ)言。對(duì)Scala開發(fā)人員的需求越來(lái)越大,因?yàn)榇髷?shù)據(jù)公司重視能在Spark中掌握數(shù)據(jù)分析和處理的高效而健壯的開發(fā)人員。

Python是為Java程序員學(xué)習(xí)相對(duì)容易的因?yàn)樗恼Z(yǔ)法和標(biāo)準(zhǔn)庫(kù)。然而,Python是不是一個(gè)高度并行和可擴(kuò)展的像SoundCloud或推特系統(tǒng)的理想選擇。

學(xué)習(xí)Scala豐富了程序員對(duì)類型系統(tǒng)中各種新抽象的認(rèn)識(shí),新的函數(shù)編程特性和不可變數(shù)據(jù)。

3、并發(fā)性

大數(shù)據(jù)系統(tǒng)的復(fù)雜多樣的基礎(chǔ)結(jié)構(gòu)需要一種編程語(yǔ)言,它有能力集成多個(gè)數(shù)據(jù)庫(kù)和服務(wù)。在大數(shù)據(jù)的生態(tài)系統(tǒng)中,Scala勝在Play框架提供了許多異步庫(kù)和容易集成的各種并發(fā)原語(yǔ),比如Akka。Scala使開發(fā)人員編寫高效的、可讀性和可維護(hù)性的服務(wù)而不是。相反,Python不支持的重量級(jí)進(jìn)程并行在用uWSGI時(shí),但它不支持真正的多線程。

當(dāng)使用Python寫Spark程序時(shí),不管進(jìn)程有多少線程,每次只有一個(gè)CPU在Python進(jìn)程中處于活動(dòng)狀態(tài)。這有助于每個(gè)CPU核心只處理一個(gè)進(jìn)程,但糟糕的是,每當(dāng)部署新代碼時(shí),需要重新啟動(dòng)更多的進(jìn)程,還需要額外的內(nèi)存開銷。Scala在這些方面更高效,更容易共事。

4、類型安全

當(dāng)用Spark編程時(shí),開發(fā)人員需要根據(jù)變化的需求不斷地重新編碼代碼。Scala是靜態(tài)類型語(yǔ)言,盡管它看起來(lái)像一種動(dòng)態(tài)類型語(yǔ)言,因?yàn)樗哂袃?yōu)雅的類型推斷機(jī)制。作為靜態(tài)類型語(yǔ)言,Scala仍然提供編譯器來(lái)捕獲編譯時(shí)錯(cuò)誤。

重構(gòu)像Scala這樣的靜態(tài)類型語(yǔ)言的程序代碼比重構(gòu)像Python這樣的動(dòng)態(tài)語(yǔ)言代碼要容易得多且簡(jiǎn)單。開發(fā)人員在修改Python程序代碼后常常會(huì)遇到困難,因?yàn)樗斐傻腷ug比修復(fù)程序原有的bug要多。所以最好是緩慢而安全地使用Scala,而不是快速的、死地使用Python。

對(duì)于小型的特殊實(shí)驗(yàn),Python是一種有效的選擇,但它并不像靜態(tài)語(yǔ)言那樣有效地?cái)U(kuò)展到大型軟件工程中。

5、易用性

Scala和Python語(yǔ)言在Sparkcontext中有同樣的表達(dá),因此通過(guò)使用Scala或Python可以實(shí)現(xiàn)所需的功能。無(wú)論哪種方式,程序員都會(huì)創(chuàng)建一個(gè)Sparkcontext并調(diào)用函數(shù)。Python是一種比Scala更便于用戶使用的語(yǔ)言。Python不那么冗長(zhǎng),開發(fā)人員很容易用Python編寫腳本來(lái)調(diào)用Spark。易用性是一個(gè)主觀因素,因?yàn)樗Q于程序員的個(gè)人偏好。

6、高級(jí)特性

Scala編程語(yǔ)言有幾個(gè)存在類型、宏和隱式。Scala的晦澀難懂的語(yǔ)法可能很難對(duì)開發(fā)人員可能無(wú)法理解的高級(jí)特性進(jìn)行實(shí)驗(yàn)。然而,Scala的優(yōu)勢(shì)在于在重要的框架和庫(kù)中使用這些強(qiáng)大的特性。

話雖如此,Scala沒(méi)有足夠的數(shù)據(jù)科學(xué)工具和庫(kù),如Python用于機(jī)器學(xué)習(xí)和自然語(yǔ)言處理。Sparkmlib–機(jī)器學(xué)習(xí)庫(kù)只有較少的ML算法但他們是理想的大數(shù)據(jù)處理。Scala缺乏良好的可視化和本地?cái)?shù)據(jù)轉(zhuǎn)換。Scala無(wú)疑是Spark streaming特性的最佳選擇,因?yàn)镻ython 通過(guò)pySpark 調(diào)用Spark.streaming不像Scala那樣先進(jìn)和成熟。

總結(jié)

“Scala速度更快,使用方便 但上手難,而Python則較慢,但很容易使用?!?/p>

Spark框架是用Scala編寫的,所以了解Scala編程語(yǔ)言有助于大數(shù)據(jù)開發(fā)人員輕松地挖掘源代碼,如果某些功能不能像預(yù)期的那樣發(fā)揮作用。使用Python增加了更多問(wèn)題和bug的可能性,因?yàn)?種不同語(yǔ)言之間的轉(zhuǎn)換是困難的。為Spark使用Scala提供對(duì)Spark框架的最新特性的訪問(wèn),因?yàn)樗鼈兪紫仍赟cala中可用,然后移植到Python中。

根據(jù)Spark決定Scala和Python取決于最適合項(xiàng)目需要的特性,因?yàn)槊糠N語(yǔ)言都有自己的優(yōu)點(diǎn)和缺點(diǎn)。在使用Apache Spark編程語(yǔ)言之前,開發(fā)者必須學(xué)習(xí)Scala和Python來(lái)熟悉它們的特性。學(xué)習(xí)了Python和Scala之后,決定何時(shí)使用Scala來(lái)Spark以及何時(shí)使用Python來(lái)調(diào)用Spark是相當(dāng)容易的。Apache Spark編程語(yǔ)言的選擇完全取決于要解決的問(wèn)題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627
  • scala
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    6417
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    主流的三種RF方案及其優(yōu)缺點(diǎn)對(duì)比分析

    主流的三種RF方案及其優(yōu)缺點(diǎn)對(duì)比分析RF IC的主要性能是什么?
    發(fā)表于 05-25 06:34

    LTE與WiMAX對(duì)比分析哪個(gè)?

    LTE與WiMAX對(duì)比分析哪個(gè)?
    發(fā)表于 05-31 06:22

    視頻標(biāo)準(zhǔn)核心技術(shù)對(duì)比分析哪個(gè)

    視頻標(biāo)準(zhǔn)核心技術(shù)對(duì)比分析哪個(gè)
    發(fā)表于 06-07 06:12

    鉛酸電池和鋰電池對(duì)比分析哪個(gè)

    鉛酸電池和鋰電池對(duì)比分析哪個(gè)?
    發(fā)表于 06-10 06:59

    CPLD與FPGA對(duì)比分析哪個(gè)

    CPLD與FPGA對(duì)比分析哪個(gè)?
    發(fā)表于 06-21 06:10

    幾款主流的Python開發(fā)板對(duì)比分析哪個(gè)?

    Python在國(guó)內(nèi)逐漸崛起和被追捧的原因?用Python可以做什么?幾款主流的Python開發(fā)板對(duì)比分析哪個(gè)
    發(fā)表于 10-26 07:06

    7大主流單片機(jī)優(yōu)缺點(diǎn)對(duì)比分析哪個(gè)

    7大主流單片機(jī)優(yōu)缺點(diǎn)對(duì)比分析哪個(gè)?
    發(fā)表于 11-02 08:27

    STM32和Arduino對(duì)比分析哪個(gè)?

    Arduino和STM32各自的特點(diǎn)是什么?STM32和Arduino對(duì)比分析哪個(gè)?
    發(fā)表于 11-04 06:34

    ARM/DSP/FPGA的區(qū)別是什么?對(duì)比分析哪個(gè)?

    ARM/DSP/FPGA的區(qū)別是什么?對(duì)比分析哪個(gè)?
    發(fā)表于 11-05 06:08

    ARM與單片機(jī)對(duì)比分析哪個(gè)

    ARM與單片機(jī)對(duì)比分析哪個(gè)?
    發(fā)表于 11-05 07:16

    CPLD與FPGA的對(duì)比分析哪個(gè)

    CPLD與FPGA的對(duì)比分析哪個(gè)?
    發(fā)表于 11-05 08:20

    異步通信與同步通信對(duì)比分析哪個(gè)?

    異步通信與同步通信對(duì)比分析哪個(gè)
    發(fā)表于 12-16 07:35

    DRAM和SRAM對(duì)比分析哪個(gè)?

    RAM有哪些分類?特點(diǎn)是什么?DRAM和SRAM對(duì)比分析哪個(gè)?
    發(fā)表于 01-20 07:16

    scala語(yǔ)言主要應(yīng)用領(lǐng)域詳解

    Scala是一門多范式的編程語(yǔ)言。本文開始介紹了Scala的概念,其次介紹了Scala的特性,最后闡述了scala語(yǔ)言的主要應(yīng)用領(lǐng)域。
    的頭像 發(fā)表于 03-07 18:08 ?1.9w次閱讀

    python語(yǔ)言優(yōu)缺點(diǎn)

    本視頻主要詳細(xì)介紹了python語(yǔ)言優(yōu)缺點(diǎn),分別是簡(jiǎn)單、易學(xué)、免費(fèi)/開源、自動(dòng)內(nèi)存管理、可以移植、解釋性、面向?qū)ο?、可擴(kuò)展。
    的頭像 發(fā)表于 12-27 16:53 ?1.6w次閱讀
    RM新时代网站-首页