者 | Ruqayyah Sara
譯者 | 彎月,責編 | 伍杏玲
出品 | CSDN(ID:CSDNnews)
我是一名全棧開發。前幾天我一直在研究算法和數據結構,因為對于程序員而言,最重要能力的就是解決問題,所有任何程序員都應該擁有強大的解決問題的基礎能力。
兩天前我開始學習Python,開始對這門語言有了更多的理解。我開始將其與JavaScript進行比較,因為JavaScript是我日常工作中使用的語言。
JavaScript和Python是兩門非常重要的語言。盡管包括我在內的許多人都知道Python或JavaScript,但我們并不清楚兩種語言之間的重要區別。
我注意到這兩門年語言有許多語義上的區別,相信理解這些區別對我和對其他人都有很大幫助。在本文中,我會比較我在兩門語言中遇到的一些基礎概念。所以,如果你熟悉JavaScript或Python,想了解二者的差異,那么你就來對地方了!
使用雙斜線(//)作為單行注釋,/* */ 作為多行注釋。
使用 # 作為單行注釋,使用三引號""" """ 作為多行注釋。
JavaScript中的每個代碼塊都必須放在花括號({})中,每條語句必須使用分號 ; 結束。
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")
數據類型
我無法在本文中完整地討論JavaScript和Python之間的數據類型差異,這里我們只討論主要的差異。
基本數據類型
上面的表格展示了JavaScript和Python的基本數據類型。JavaScript中的Number類型表示Int和float值,由編譯器在運行時確定。而JavaScript(ES10)中的BigInt用于存儲大整數,而Python使用Int表示所有尺寸的整數。
JS使用關鍵字表示空值,Python使用None。
Python沒有undefined和symbol的概念,這些是JavaScript特有的。
Python有一種特殊的數據類型——complex,用于表示復數 x + yj,其中x是實部,y是虛部。
a=3+4j
print(a.real) #3
print(a.imag) #4
非基本數據類型
上圖展示了復雜的(或者叫做非基本)數據類型。Python中的列表能存儲任何數據類型,與JavaScript一樣。
但是Python中的數組可以使用庫(如NumPy,array)來定義。Python中的數組只能包含統一數據類型。Python中的列表和數組有很大區別。數組上可以執行多種數學操作,而列表不能。
JavaScript中的對象類似于Python中的字典。兩者都包含鍵值對。但對象是JavaScript中的基本組成部分,而字典在Python中只不過是個數據容器。
Python中的元組是一個不可修改的列表。用元組表示的列表無法被重新定義。而JavaScript沒有這個概念。
因此,Python擁有內置的哈希表(字典),而JavaScript沒有內置的哈希表、方法或庫。
在JavaScript中定義變量需要使用三種主要的關鍵字:var,let和const。定義方法決定了變量的使用方式(以及作用域)。
Python中定義變量不需要使用關鍵字,只需要給變量名直接賦值即可:
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)
全等運算符
全等運算符(===)也叫“嚴格相等運算符”,會比較兩個運算數并檢查其相等性,而不會進行類型轉換,也就是說,它會檢查運算數的數據類型。返回值為布爾。JavaScript只有一個全等運算符。
var a=3,b="3";
console.log(a==b); // true
console.log(a===b); // false
Python有兩個全等運算符:is 和 is not。
is 運算符會測試兩個運算數是否為同一個對象,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
循環
JavaScript有三種循環:
入口控制循環:for和while(在執行循環語句之前測試條件)
出口控制循環:do-while(執行循環語句之后測試條件)
// 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有兩種循環:for和while。Python沒有內置的do-while循環。
Python的while循環與JavaScript的for循環類似。例如下面的例子:
c = ["red", "green", "blue", "purple"]
i = 0
while i<4:
print(c[i])
i += 1 # i++ is invalid
Python不支持++和--運算符。我們需要使用x+=1和x-=1。
for循環用來遍歷序列(列表、數組和元組)。它使用in操作符和range函數進行迭代。可以用range生成一系列數字,該函數接受三個參數:start,stop和step。
start:開始的位置(可選)。默認為0。
stop:結束的位置(必須指定)。
step:指定序列中兩個數字之間的間隔(可選)。
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之間的語義區別。
原文鏈接:https://medium.com/better-programming/semantic-differences-between-javascript-and-python-ed21b1f3ce50
本文為 CSDN 翻譯,轉載請注明來源出處。
2008 年成立以來,Stack Overflow 收到了開發人員提出的數以百萬計的問題,那么開發人員最希望在 Stack Overflow 上解決哪些問題呢?為此,我們選擇了當前流行的 11 種編程語言,并觀察開發人員針對這些編程語言都提了哪些問題?
(被選擇的 11 種編程語言)
就原始問題的數量而言,JavaScript 是 Stack Overflow 中被提問最多的編程語言,主要原因是無論開發人員以何種方式使用 Internet,都需要了解一些 JavaScript。因此在大量不同的應用程序和服務中都可以看見 JavaScript 的身影。
如果我們從時間維度來看,從 2011 年起,Python 在 Stack Overflow 中的提問數量出現了明顯的上升,這可能要歸因于數據科學的發展。2019 年,Python 成功超越 JavaScript,成為 Stack Overflow 中提問數量最多的編程語言。
開發人員到底都在問哪些問題?最受質疑的框架、包、函數和方法是什么? 最令開發人員頭疼的數據類型是什么?不同語言之間的問題存在哪些共性和差異?
為了搞清楚上述問題,我們從上面這 11 種編程語言的提問中各抽取了投票最高的 1000 個問題,并使用 Python 做了數據清理,然后將這 11000 個問題整合到一個 JavaScript 詞云算法中,從中我們得到了一些結論。
JavaScript 面世已有 23 年,在 Stack Overflow 中也已經有 11 年,其中“jquery”是迄今為止最受質疑的 JavaScript 框架。
Python 最早出現在 1990 年,如今是數據科學家首選的編程語言之一。Python 的問題比較常出現在連接數據處理庫,例如“panda”和“dataframe”。
Python 是一種通用的“膠水”語言,可以應用于不同的技術領域,這也是為什么 Web 開發框架 django 會收到比較多的疑問。
R 語言也是數據科學家常用的編程語言。但與 Python 不同的是,R 語言幾乎只用于數據處理,因此關于 R 語言的疑問集中在“dataframe”、“datatable”和“matrix”。
Python 和 R 都有優秀的數據操作庫,如果就數據可視化而言,很多人認為 R 語言要優于 Python。但是在 Stack Overflow 中的實際情況是,R 語言中的數據可視化庫“ggplot”被開發者提問的最多。
Ruby 出現于 90 年代中期,其獲得開發者比較多的關注是在 2005 年,David Heinemeier Hansson(DHH) 發布了基于 Ruby 的開發框架 Ruby on Rails。目前開發者提問最多的也是 Ruby on Rails。
C# 是微軟公司在 2000 年發布的一種面向對象的編程語言,運行于 .NET Framework 和 .NET Core 上。
C++ 發布于 1985 年,是目前電子游戲開發人員的首選語言。針對 C++,開發人員的提問主要集中在多邊形基本構建塊 vector,因為多邊形是三維視頻游戲的基本視覺構建塊。
Java 首次發布于 1995 年,是一種寫一次可以在任何地方運行的通用編程語言。Java 是在 90 年代末和萬維網早期的 PC 熱潮中流行起來的,是許多 Windows 應用程序背后的驅動力?,F在,Java 主要被用來開發 Android 應用程序。
Objective-C 首次發布于 1984 年,是這 11 種編程語言中最古老的。Objective-C 是蘋果為 OSX 操作系統提供支持的主要語言,現在主要為 iPhone 上的 iOS 應用程序提供支持。
Swift 首次出現于 2014 年,目前在蘋果的開發領域已經取代了 Objective-C。
從上面 Swift 的詞云中,我們發現了一個很有趣的標簽“Objective-C”,可能的原因是很多 iOS 開發者希望通過 Stack Overflow 來學習更多的知識。
PHP 首次發布于 1995 年,被設計為用于 web 開發的服務器端腳本語言。當然,PHP 現在的用途仍是如此,所以圍繞 PHP 的提問主要集中在“laravel”框架。
與前 10 種功能齊全的編程語言不同,SQL 是專為數據操作所設計的。正因為此,SQL 最常見的痛點都圍繞著數據庫訪問,詞云中的關鍵字主要有 sever、mysql、database、query、select 等等。
隨著時間的推移,每一種編程語言都有一個十分擅長的使用場景,例如 R 語言和數據科學,Swift 和 iOS 開發,C++ 和視頻游戲開發。使用場景不同也解釋了為什么大家提問的類型和方向會有所不同。除了差異性,我們也從調查中看到了一些共性的問題,例如在基本的數據類型中,字符串和數組是經常出現的痛點。
附 11000 個問題的詞云:
原文鏈接:https://www.globalapptesting.com/blog/picking-apart-stackoverflow-what-bugs-developers-the-most
更多有關精彩內容,請點擊“了解更多”。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。