者 | Ruqayyah Sara
譯者 | 彎月,責編 | 伍杏玲
出品 | CSDN(ID:CSDNnews)
我是一名全棧開發(fā)。前幾天我一直在研究算法和數(shù)據(jù)結(jié)構(gòu),因為對于程序員而言,最重要能力的就是解決問題,所有任何程序員都應(yīng)該擁有強大的解決問題的基礎(chǔ)能力。
兩天前我開始學習Python,開始對這門語言有了更多的理解。我開始將其與JavaScript進行比較,因為JavaScript是我日常工作中使用的語言。
JavaScript和Python是兩門非常重要的語言。盡管包括我在內(nèi)的許多人都知道Python或JavaScript,但我們并不清楚兩種語言之間的重要區(qū)別。
我注意到這兩門年語言有許多語義上的區(qū)別,相信理解這些區(qū)別對我和對其他人都有很大幫助。在本文中,我會比較我在兩門語言中遇到的一些基礎(chǔ)概念。所以,如果你熟悉JavaScript或Python,想了解二者的差異,那么你就來對地方了!
使用雙斜線(//)作為單行注釋,/* */ 作為多行注釋。
使用 # 作為單行注釋,使用三引號""" """ 作為多行注釋。
JavaScript中的每個代碼塊都必須放在花括號({})中,每條語句必須使用分號 ; 結(jié)束。
var a = 2;
if(a>0){
console.log("Positive");
}
else{
console.log("Negative");
}
Python中的代碼塊使用縮進表示。它不使用花括號或圓括號,而是使用空白。每條語句都需要換行。
a = 2
if a>0:
print("Positive")
else:
print("negative")
print("does not belong to else block")
數(shù)據(jù)類型
我無法在本文中完整地討論JavaScript和Python之間的數(shù)據(jù)類型差異,這里我們只討論主要的差異。
基本數(shù)據(jù)類型
上面的表格展示了JavaScript和Python的基本數(shù)據(jù)類型。JavaScript中的Number類型表示Int和float值,由編譯器在運行時確定。而JavaScript(ES10)中的BigInt用于存儲大整數(shù),而Python使用Int表示所有尺寸的整數(shù)。
JS使用關(guān)鍵字表示空值,Python使用None。
Python沒有undefined和symbol的概念,這些是JavaScript特有的。
Python有一種特殊的數(shù)據(jù)類型——complex,用于表示復數(shù) x + yj,其中x是實部,y是虛部。
a=3+4j
print(a.real) #3
print(a.imag) #4
非基本數(shù)據(jù)類型
上圖展示了復雜的(或者叫做非基本)數(shù)據(jù)類型。Python中的列表能存儲任何數(shù)據(jù)類型,與JavaScript一樣。
但是Python中的數(shù)組可以使用庫(如NumPy,array)來定義。Python中的數(shù)組只能包含統(tǒng)一數(shù)據(jù)類型。Python中的列表和數(shù)組有很大區(qū)別。數(shù)組上可以執(zhí)行多種數(shù)學操作,而列表不能。
JavaScript中的對象類似于Python中的字典。兩者都包含鍵值對。但對象是JavaScript中的基本組成部分,而字典在Python中只不過是個數(shù)據(jù)容器。
Python中的元組是一個不可修改的列表。用元組表示的列表無法被重新定義。而JavaScript沒有這個概念。
因此,Python擁有內(nèi)置的哈希表(字典),而JavaScript沒有內(nèi)置的哈希表、方法或庫。
在JavaScript中定義變量需要使用三種主要的關(guān)鍵字:var,let和const。定義方法決定了變量的使用方式(以及作用域)。
Python中定義變量不需要使用關(guān)鍵字,只需要給變量名直接賦值即可:
a = 3
print (a) # 3
If-Else
JavaScript
JavaScript中的條件語句是 if、else if、else還有switch。
Python中的條件語句是if、elif和else。
elif是else-if的縮寫。Python沒有switch語句。相反,可以用字典來代替。
JavaScript的三元運算符(?:)是一個條件運算符,語法為(condition)?(expresssionIfTrue):(expressionIfFalse):
var age = 26;
var beverage = (age >= 21) ? "Beer" : "Juice";
console.log(beverage); // "Beer"
Python中的三元運算符的語法是 (expressionIfTrue) if (condition) else (expressionIfFalse)
a, b = 10, 20
min = a if a < b else b
print(min)
全等運算符
全等運算符(===)也叫“嚴格相等運算符”,會比較兩個運算數(shù)并檢查其相等性,而不會進行類型轉(zhuǎn)換,也就是說,它會檢查運算數(shù)的數(shù)據(jù)類型。返回值為布爾。JavaScript只有一個全等運算符。
var a=3,b="3";
console.log(a==b); // true
console.log(a===b); // false
Python有兩個全等運算符:is 和 is not。
is 運算符會測試兩個運算數(shù)是否為同一個對象,is not為is的反面。
x = 5
if (type(x) is int):
print ("true") # true
if ( type(x) is not int):
print ("true")
成員運算符
成員運算符檢查對象中的特定屬性。JavaScript只有一個成員運算符:in。
const user= {name: 'Sara', age: 19, sex: "female"};
console.log('name' in car);
// output: true
成員運算符用于驗證某個值是否為成員。Python有兩個成員運算符:in和not in。
x = 24
y = 20
list = [10, 20, 30, 40, 50 ]
if ( x not in list ):
print ("not present") # Output:True
循環(huán)
JavaScript有三種循環(huán):
入口控制循環(huán):for和while(在執(zhí)行循環(huán)語句之前測試條件)
出口控制循環(huán):do-while(執(zhí)行循環(huán)語句之后測試條件)
// for loop
var c = ["red", "green", "blue", "purple"];
for (var i = 0; i<4; i++){
console.log(c[i]);
}
// prints array// while
var c = ["red", "green", "blue", "purple"];
while(i<4){
console.log(c[i]);
i++;
} // prints array
Python有兩種循環(huán):for和while。Python沒有內(nèi)置的do-while循環(huán)。
Python的while循環(huán)與JavaScript的for循環(huán)類似。例如下面的例子:
c = ["red", "green", "blue", "purple"]
i = 0
while i<4:
print(c[i])
i += 1 # i++ is invalid
Python不支持++和--運算符。我們需要使用x+=1和x-=1。
for循環(huán)用來遍歷序列(列表、數(shù)組和元組)。它使用in操作符和range函數(shù)進行迭代??梢杂胷ange生成一系列數(shù)字,該函數(shù)接受三個參數(shù):start,stop和step。
start:開始的位置(可選)。默認為0。
stop:結(jié)束的位置(必須指定)。
step:指定序列中兩個數(shù)字之間的間隔(可選)。
x = range(5)
for n in x:
print(n) # 1,2,3,4x = range(3,9)
for n in x:
print(n) # 3,4,5,6,7,8x = range(2,20,2)
for n in x:
print(n) # 2,4,6,8,10,12,14,16,18
以上就是我注意到的最基本的JavaScript和Python之間的語義區(qū)別。
原文鏈接:https://medium.com/better-programming/semantic-differences-between-javascript-and-python-ed21b1f3ce50
本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。
近日,來自多倫多大學和 YScope 公司(為軟件系統(tǒng)提供創(chuàng)新的日志管理和故障排除工具。由一群計算機工程教授和博士創(chuàng)立)的 David Lion、多倫多大學 Adrian Chiu 和 Michael Stumm、多倫多大學和 YScope 公司 Ding Yuan 共同發(fā)布了一份《調(diào)查托管語言的運行時性能:為什么 JavaScript 和 Python 比 C++ 慢了 8 倍和 29 倍,而 Java 和 Go 卻能更快》(https://www.usenix.org/system/files/atc22-lion.pdf)的論文分析報告,深度剖析了不同編程語言運行時在代碼開發(fā)中真實的性能情況,由此方便開發(fā)者可以精確地測量執(zhí)行任何字節(jié)碼指令所花費的時間等。
性能是系統(tǒng)軟件不得不面對的挑戰(zhàn)
在報告中,研究人員指出,自 2015 年以來,具有集成運行時環(huán)境的編程語言越來越受歡迎,其中,全球知名的代碼托管平臺 GitHub 上最受歡迎的三種語言分別是 JavaScript、Java 和 Python。
作為開發(fā)利器,編程語言幫助開發(fā)者快速構(gòu)建各種應(yīng)用程序和服務(wù),也極大地提高了生產(chǎn)力。同時,這些語言自身也提供了各種功能,如動態(tài)類型檢查、帶有垃圾收集的內(nèi)存管理,以及動態(tài)內(nèi)存安全檢查等等。為此,研究人員用「托管語言」(managed languages)專業(yè)術(shù)語來指代這些類型的編程語言。
現(xiàn)實來看,托管語言越來越多地被用于實現(xiàn)性能至關(guān)重要的系統(tǒng)軟件上,如Hadoop 和 Spark 都在 Java 虛擬機(JVM)上運行,因為它們分別用 Java 和 Scala 實現(xiàn);Kubernetes、etcd(分布式鍵值存儲)和 M3(由 Uber 建立的分布式時間序列數(shù)據(jù)庫和查詢引擎)都是用 Go 實現(xiàn)的。
當前,甚至連操作系統(tǒng)(OS)的內(nèi)核 Biscuit 也是用 Go 實現(xiàn)的 。Openstack、Paypal、Instagram 和 Dropbox 都大量使用 Python,其中,Python 是 Dropbox "在后臺服務(wù)和桌面客戶端應(yīng)用中使用最廣泛的語言",在一個存儲庫中就有近 400 萬行 Python 代碼;JavaScript 也被用于 Facebook 的 Bladerunner pub/sub 系統(tǒng)的性能關(guān)鍵路徑中。
在開發(fā)過程中,編程語言的性能在一開始很少會被考慮到項目中,部分原因是不少開發(fā)者認為性能問題可以在以后慢慢去解決,也許可以通過簡單地增加硬件來進行橫向擴展。
不過,隨著代碼產(chǎn)品或服務(wù)使用規(guī)模的擴大,服務(wù)變得越來越慢或者硬件成本變高,性能成為一個不容忽視的問題。這也是為什么 Stream 要放棄了 Python 而改用 Go、 Discord 從 Go 切換到 Rust、Twitter 從 Ruby on Rails 切換到 Scala 和 Java 的主要原因。
不少開發(fā)者往往為了提升性能,想破腦袋,但現(xiàn)實只有兩條路,一條是從現(xiàn)有的代碼中想盡辦法盡可能地做優(yōu)化,另一條是思考使用的編程語言是否已經(jīng)達到了性能極限,看看有沒有必要將舊的代碼移植到一個新的性能更高的語言上。
為了徹底解開系統(tǒng)軟件中不同編程語言導致的性能問題,研究人員決定以 C++ 為極限,對 Java、Go、JavaScript 和 Python 四種編程,還有應(yīng)用最廣泛的運行時系統(tǒng) CPython、OpenJDK。Node.js 與 JavaScript 的 V8 引擎進行深入的定量性能分析。
同時,研究人員還從頭開始建立了 6 個應(yīng)用程序,并創(chuàng)建了一個名為
Python和JavaScript是兩種流行的編程語言,具有不同的特性。
但是,在學習之前,你必須對JavaScript和Python有完整的了解。在本文中,我們將向你介紹這兩種編程語言的知識。
Python是什么?
Python是一種通用的面向?qū)ο蟮挠嬎銠C編程語言。它是一種注重代碼可讀性的高級編程語言;因此,它易于閱讀和實現(xiàn)。如果你是初學者,你需要從這種基礎(chǔ)編程語言開始學習編碼。它是一種支持多種編程風格的腳本語言。
JavaScript是什么?
另一方面,Java Script是一種在應(yīng)用程序的前端和后端工作的計算機編程語言。這種編程語言主要用于客戶端腳本和服務(wù)器端。它也是一種易于開始學習的編程語言,它提供了一個強大的測試工作流程。
Python和JavaScript的詳細比較
哈希表
哈希表是用于多種用途的索引結(jié)構(gòu),例如刪除操作、搜索和插入。Python 編程語言具有內(nèi)置的哈希表,稱為“字典”。雖然JavaScript沒有內(nèi)置的哈希表結(jié)構(gòu),但它利用了另一種方式來實現(xiàn)功能。
數(shù)據(jù)類型
數(shù)據(jù)通常分為兩類:可變的和不可變的。可變數(shù)據(jù)類型能夠在賦值或創(chuàng)建時改變值;另一方面,不可變數(shù)據(jù)類型不會改變值。JavaScript在可變和不可變數(shù)據(jù)類型之間沒有明顯的區(qū)別,但是Python支持這兩種數(shù)據(jù)類型。例如,列表屬于不可變數(shù)據(jù)類型,而集合屬于可變數(shù)據(jù)類型。
句法
JavaScript中的語法是原生類型的,不像Python那樣易讀。另一方面,Python使用小而簡潔的語法,這有助于輕松學習。
對象訪問
在JavaScript和Python中,訪問對象涉及不同的方法。Python使用“self”關(guān)鍵字,而JavaScript使用“this”方法。這就是為什么Python編程語言訪問對象的第一個參數(shù)總是自參數(shù)。
代碼塊
代碼塊幫助編碼、調(diào)試和運行。在JavaScript中,代碼塊是花括號,而縮進是Python編程語言的代碼塊。此外,JavaScript使用分號,Python使用換行符。
隱式數(shù)據(jù)轉(zhuǎn)換
JavaScript是一種反映隱式數(shù)據(jù)轉(zhuǎn)換的弱類型編程語言。Python支持字符串和動態(tài)類型樣式。動態(tài)風格是一種可以根據(jù)任務(wù)改變類型的風格。
JavaScript的應(yīng)用
JavaScript和Python都有特定的屬性,允許我們在多個應(yīng)用程序中使用它們。以下是JavaScript的應(yīng)用:
服務(wù)器端技術(shù)(例如;Express.js,MongoDB,Node.js)
構(gòu)建安全的應(yīng)用程序
移動應(yīng)用程序開發(fā)
前端技術(shù)(例如;jQuery,ReactJS)
動態(tài)spa(單頁應(yīng)用程序)
想要了解JavaScript的更多知識,可以參加web前端培訓,課程實時更新,緊跟企業(yè)需求,讓你輕松找到工作。
Python的應(yīng)用
Python的應(yīng)用列表是巨大的。以下是最受歡迎的:
機器學習
GUI應(yīng)用程序
XML處理
人工智能語言
科學應(yīng)用
臨時編程
數(shù)據(jù)庫應(yīng)用
原型化Web腳本
應(yīng)該先學哪種語言?
決定學習編程語言的順序最好由使用目的來定義。如果你是編碼初學者,Python更容易學。然而,如果你想學習前端編程語言,那么JavaScript是一個更好的選擇。
現(xiàn)在你們都知道了這兩種編程語言之間的區(qū)別點。這兩種編程語言在計算機科學和編碼領(lǐng)域都有重要意義。使用哪種編程語言取決于任務(wù)的要求。JavaScript主要是服務(wù)器端腳本語言,而Python是客戶端腳本語言。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。