注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請啟用 JavaScript 以獲得完整體驗。

Python 與其他語言的比較

Python 與其他語言的比較

免責宣告: 這篇文章寫於 1997 年左右。它顯示了它的年代。它在此僅作為歷史文物保留。 --Guido van Rossum

Python 經常與 Java、JavaScript、Perl、Tcl 或 Smalltalk 等其他解釋型語言進行比較。 與 C++、Common Lisp 和 Scheme 的比較也可能具有啟發性。 在本節中,我將簡要地將 Python 與這些語言中的每一種進行比較。 這些比較僅側重於語言問題。 在實踐中,程式語言的選擇通常取決於其他現實世界的約束,例如成本、可用性、培訓和先前的投資,甚至情感上的依戀。 由於這些方面變化很大,因此在本次比較中過多考慮它們似乎是浪費時間。

Java

通常預計 Python 程式的執行速度比 Java 程式慢,但它們的開發時間也少得多。 Python 程式通常比等效的 Java 程式短 3-5 倍。 這種差異可歸因於 Python 內建的高階資料型別及其動態型別。 例如,Python 程式設計師不會浪費時間宣告引數或變數的型別,並且 Python 強大的多型列表和字典型別(其中豐富的語法支援直接構建到語言中)幾乎在每個 Python 程式中都有用武之地。 由於執行時型別化,Python 的執行時必須比 Java 的執行時更努力。 例如,在計算表示式 a+b 時,它必須首先檢查物件 a 和 b 以找出它們的型別,這在編譯時是未知的。 然後,它呼叫適當的加法運算,這可能是過載的使用者定義方法。 另一方面,Java 可以執行高效的整數或浮點加法,但需要為 a 和 b 宣告變數,並且不允許為使用者定義的類的例項過載 + 運算子。

由於這些原因,Python 更適合作為“膠水”語言,而 Java 更適合作為低階實現語言。 事實上,兩者結合起來是一個很好的組合。 可以在 Java 中開發元件,並在 Python 中組合形成應用程式; Python 還可以用於原型化元件,直到它們的設計可以在 Java 實現中“硬化”。 為了支援這種型別的開發,正在開發用 Java 編寫的 Python 實現,它允許從 Java 呼叫 Python 程式碼,反之亦然。 在此實現中,Python 原始碼被翻譯為 Java 位元組碼(藉助執行時庫來支援 Python 的動態語義)。

Javascript

Python 的“基於物件”子集大致等效於 JavaScript。 與 JavaScript(不像 Java)一樣,Python 支援一種使用簡單函式和變數而不參與類定義的程式設計風格。 但是,對於 JavaScript 來說,僅此而已。 另一方面,Python 透過真正的面向物件程式設計風格支援編寫更大的程式和更好的程式碼重用,其中類和繼承起著重要作用。

Perl

Python 和 Perl 來自相似的背景(Unix 指令碼,兩者都已經遠遠超越),並且具有許多相似的功能,但具有不同的哲學。 Perl 強調對常見面嚮應用程式的任務的支援,例如,透過內建的正則表示式、檔案掃描和報表生成功能。 Python 強調對常見程式設計方法(例如資料結構設計和麵向物件程式設計)的支援,並透過提供優雅但不至於過於神秘的表示法來鼓勵程式設計師編寫可讀(從而易於維護)的程式碼。 因此,Python 接近 Perl,但在其原始應用領域很少能超越它; 然而,Python 的適用性遠遠超出了 Perl 的範圍。

Tcl

像 Python 一樣,Tcl 可用作應用程式擴充套件語言,以及獨立的程式語言。 然而,傳統上將所有資料儲存為字串的 Tcl 在資料結構方面較弱,並且執行典型程式碼的速度比 Python 慢得多。 Tcl 還缺乏編寫大型程式所需的功能,例如模組化名稱空間。 因此,雖然使用 Tcl 的“典型”大型應用程式通常包含以 C 或 C++ 編寫的特定於該應用程式的 Tcl 擴充套件,但等效的 Python 應用程式通常可以用“純 Python”編寫。 當然,純 Python 開發比必須編寫和除錯 C 或 C++ 元件要快得多。 有人說 Tcl 唯一可取之處是 Tk 工具包。 Python 已採用 Tk 的介面作為其標準 GUI 元件庫。

Tcl 8.0 透過提供具有有限資料型別支援的位元組碼編譯器和新增名稱空間來解決速度問題。 然而,它仍然是一種更加繁瑣的程式語言。

Smalltalk

Python 和 Smalltalk 之間最大的區別也許在於 Python 更“主流”的語法,這使其在程式設計師培訓方面更具優勢。 像 Smalltalk 一樣,Python 具有動態型別和繫結,並且 Python 中的所有內容都是一個物件。 然而,Python 將內建物件型別與使用者定義的類區分開來,並且目前不允許從內建型別繼承。 Smalltalk 的集合資料型別標準庫更加完善,而 Python 的庫具有更多用於處理網際網路和 WWW 現實的功能,例如電子郵件、HTML 和 FTP。

Python 在開發環境和程式碼分發方面具有不同的理念。 Smalltalk 傳統上具有由環境和使用者程式組成的整體“系統映像”,而 Python 將標準模組和使用者模組都儲存在單個檔案中,這些檔案可以輕鬆地在系統外部重新排列或分發。 一個結果是,由於 GUI 沒有內建到系統中,因此有多種選擇可以將圖形使用者介面 (GUI) 連線到 Python 程式。

C++

為 Java 所說的一切幾乎也適用於 C++,只是更多了:Python 程式碼通常比等效的 Java 程式碼短 3-5 倍,而它通常比等效的 C++ 程式碼短 5-10 倍! 軼事證據表明,一名 Python 程式設計師可以在兩個月內完成兩名 C++ 程式設計師一年都無法完成的工作。 Python 作為一種膠水語言大放異彩,用於組合用 C++ 編寫的元件。

Common Lisp 和 Scheme

這些語言在其動態語義方面與 Python 接近,但在其語法方法上卻截然不同,以至於比較幾乎變成了宗教爭論:Lisp 缺乏語法是優勢還是劣勢? 應該注意的是,Python 具有類似於 Lisp 的自省能力,並且 Python 程式可以動態構建和執行程式片段。 通常,現實世界的屬性是決定性的:Common Lisp 很大(在各個意義上),而 Scheme 世界在許多不相容的版本之間支離破碎,而 Python 具有一個單一的、免費的、緊湊的實現。