python之 python 起源、語言特點

張衝andy發表於2017-06-03
一、 1.1  什麼是 Python
Python 是一門優雅而健壯的程式語言,它繼承了傳統編譯語言的強大性和通用性,同時也借鑑了簡單指令碼和解釋語言的易用性。它可以幫你完成工作,而且一段時間以後,你還能看明白自己寫的這段程式碼。你會對自己如此快地學會它和它強大的功能感到十分的驚訝,更不用提你已經完成的工作了!只有你想不到,沒有 Python 做不到

二、  2 1.2  起源
貴鐸·範·羅薩姆(Guido van Rossum)於 1989 年底始創了 Python,那時,他還在荷蘭的 CWI(Centrum voor Wiskunde en Informatica,國家數學和電腦科學研究院)。1991 年初,Python 釋出了第一個公開發行版。這一切究竟是如何開始的呢?像 C、C++、Lisp、Java和 Perl 一樣,Python 來自於某個研究專案,專案中的那些程式設計師利用手邊現有的工具辛苦的工作著,他們設想並開發出了更好的解決辦法。
                              
那時範·羅薩姆是一位研究人員,對解釋型語言 ABC 有著豐富的設計經驗,這個語言同樣也是在 CWI 開發的。但是他不滿足其有限的開發能力。已經使用並參與開發了像 ABC 這樣的高階語言後,再退回到 C 語言顯然是不可能的。他所期望的工具有一些是用於完成日常系統管理任務的,而且它還希望能夠訪問 Amoeba 分散式作業系統的系統呼叫。儘管範·羅薩姆也曾想過為 Amoeba 開發專用語言,但是創造一種通用的程式設計語言顯然更加明智,於是在 1989 年末,Python 的種子被播下了。

三、  3 1.3  特點
儘管Python已經流行了超過15年,但是一些人仍舊認為相對於通用軟體開發產業而言,它還是個新丁。我們應當謹慎地使用“相對”這個詞,因為“網路時代”的程式開發,幾年看
上去就像幾十年。當人們詢問:“什麼是 Python?”的時候,很難用任何一個具象來描述它。人們更傾向於一口氣不加思索地說出他們對 Python 的所有感覺,Python 是___(請填寫)__,這些特點究竟又是什麼呢?為了讓你能知其所以然,我們下面會對這些特點進行逐一地闡釋。
1.3.1  高階
伴隨著每一代程式語言的產生,我們會達到一個新的高度。組合語言是上帝獻給那些掙扎在機器程式碼中的人的禮物,後來有了 FORTRAN、 C 和 Pascal 語言,它們將計算提升到了嶄新的高度,並且開創了軟體開發行業。伴隨著 C 語言誕生了更多的像 C++、Java 這樣的現代編譯語言。我們沒有止步於此,於是有了強大的、可以進行系統呼叫的解釋型指令碼語言,例如 Tcl、Perl 和 Python。
這些語言都有高階的資料結構,這樣就減少了以前“框架”開發需要的時間。像 Python 中的列表(大小可變的陣列)和字典(雜湊表)就是內建於語言本身的。在核心語言中提供這些重要的構建單元,可以鼓勵人們使用它們,縮短開發時間與程式碼量,產生出可讀性更好的程式碼。在 C 語言中,對於混雜陣列(Python 中的列表)和雜湊表(Python 中的字典)還沒有相應的標準庫,所以它們經常被重複實現,並被複制到每個新專案中去。這個過程混亂而且容易產生錯誤。C++使用標準模版庫改進了這種情況,但是標準模版庫是很難與 Python 內建的列表和字典的簡潔和易讀相提並論的。                              
1.3.2  物件導向
建議:物件導向程式設計為資料和邏輯相分離的結構化和過程化程式設計新增了新的活力。物件導向 程式設計支援將特定的行為、特性以及和/或功能與它們要處理或所代表的資料結合在一起。
Python 的物件導向的特性是與生俱來的。然而,Python 絕不想 Java 或 Ruby 僅僅是一門物件導向語言,事實上它融匯了多種程式設計風格。例如,它甚至借鑑了一些像 Lisp 和 Haskell 這樣的函式語言的特性。
1.3.3  可升級
大家常常將 Python 與批處理或 Unix 系統下的 shell 相提並論。簡單的 shell 指令碼可以用來處理簡單的任務,就算它們可以在長度上(無限度的)增長,但是功能總會有所窮盡。Shell指令碼的程式碼重用度很低,因此,你只能止步於小專案。實際上,即使一些小專案也可能導致指令碼又臭又長。Python 卻不是這樣,你可以不斷地在各個專案中完善你的程式碼,新增額外的新的或者現存的 Python 元素,也可以重用您腦海中的程式碼。Python 提倡簡潔的程式碼設計、高階的資料結構和模組化的元件,這些特點可以讓你在提升專案的範圍和規模的同時,確保靈活性、一致性並縮短必要的除錯時間。“可升級”這個術語最經常用於衡量硬體的負載,通常指為系統新增了新的硬體後帶來的效能提升。我們樂於在這裡對這個引述概念加以區分,我們試圖用“可升級”來傳達一種觀念,這就是:Python 提供了基本的開發模組,你可以在它上面開發你的軟體,而且當這些需要擴充套件和增長時,Python 的可插入性和模組化架構則能使你的專案生機盎然和易於管理。
1.3.4  可擴充套件
就算你的專案中有大量的 Python 程式碼,你也依舊可以有條不紊地透過將其分離為多個檔案或模組加以組織管理。而且你可以從一個模組中選取程式碼,而從另一個模組中讀取屬性。更棒的是,對於所有模組,Python 的訪問語法都是相同的。不管這個模組是 Python 標準庫中的還是你一分鐘之前創造的,哪怕是你用其他語言寫的擴充套件都沒問題!藉助這些特點,你會感覺自己根據需要“擴充套件”了這門語言,而且你已經這麼做了。程式碼中的瓶頸,可能是在效能分析中總排在前面的那些熱門或者一些特別強調效能的地方,可以作為 Python 擴充套件用 C 重寫。 。需要重申的是,這些介面和純 Python 模組的介面是一模一樣的,乃至程式碼和物件的訪問方法也是如出一轍的。唯一不同的是,這些程式碼為效能帶來了顯著的提升。自然,這全部取決你的應用程式以及它對資源的需求情況。很多時候,使用編譯型程式碼重寫程式的瓶頸部分絕對是益處多多的,因為它能明顯提升整體效能。
程式設計語言中的這種可擴充套件性使得工程師能夠靈活附加或定製工具,縮短開發週期。雖然像 C、C++乃至 Java 等主流第三代語言(3GL)都擁有該特性,但是這麼容易地使用 C 編寫擴充套件確實是 Python 的優勢。此外,還有像 PyRex 這樣的工具,允許 C 和 Python 混合程式設計,使編寫擴充套件更加輕而易舉,因為它會把所有的程式碼都轉換成 C 語言程式碼。因為 Python 的標準實現是使用 C 語言完成的(也就是 CPython),所以要使用 C 和 C++編寫 Python 擴充套件。Python 的 Java 實現被稱作 Jython,要使用 Java 編寫其擴充套件。最後,還有 IronPython,這是針對 .NET 或 Mono 平臺的 C# 實現。你可以使用 C# 或者 VB.Net 擴充套件 IronPython。
1.3.5  可移植性
在各種不同的系統上可以看到 Python 的身影,這是由於在今天的計算機領域,Python 取得了持續快速的成長。因為 Python 是用 C 寫的,又由於 C 的可移植性,使得 Python 可以執行在任何帶有 ANSI C 編譯器的平臺上。儘管有一些針對不同平臺開發的特有模組,但是在任何一個平臺上用 Python 開發的通用軟體都可以稍事修改或者原封不動的在其他平臺上執行。這種可移植性既適用於不同的架構,也適用於不同的作業系統。
1.3.6  易學
Python 關鍵字少、結構簡單、語法清晰。這樣就使得學習者可以在相對更短的時間內輕鬆上手。對初學者而言,可能感覺比較新鮮的東西可能就是 Python 的物件導向特點了。那些還未能全部精通 OOP(Object Oriented Programming, 物件導向的程式設計)的人對徑直使用 Python還是有所顧忌的,但是 OOP 並非必須或者強制的。入門也是很簡單的,你可以先稍加涉獵,等到有所準備之後才開始使用。
1.3.7  易讀
Python 與其他語言顯著的差異是,它沒有其他語言通常用來訪問變數、定義程式碼塊和進行模式匹配的命令式符號。通常這些符號包括:美元符號($)、分號(;)、波浪號(~)等等。沒有這些分神的傢伙,Python 程式碼變得更加定義清晰和易於閱讀。讓很多程式設計師沮喪(或者欣慰)的是,不像其他語言,Python 沒有給你多少機會使你能夠寫出晦澀難懂的程式碼,而是讓其他人很快就能理解你寫的程式碼,反之亦然。如前所述,一門語言的可讀性讓它更易於學習。我們甚至敢冒昧的聲稱,即使對那些之前連一行 Python 程式碼都沒看過的人來說,那些程式碼也是相當容易理解的。                    
1.3.8  易維護
原始碼維護是軟體開發生命週期的組成部分。只要不被其他軟體取代或者被放棄使用,你的軟體通常會保持繼續的再開發。這通常可比一個程式設計師在一家公司的在職時間要長得多了。Python 專案的成功很大程度上要歸功於其原始碼的易於維護,當然這也要視程式碼長度和複雜度而定。然而,得出這個結論並不難,因為 Python 本身就是易於學習和閱讀的。Python 另外一個激動人心的優勢就是,當你在閱讀自己六個月之前寫的指令碼程式的時候,不會把自己搞得一頭霧水,也不需要藉助參考手冊才能讀懂自己的軟體。
1.3.9  健壯性
沒有什麼能夠比允許程式設計師在錯誤發生的時候根據出錯條件提供處理機制更有效的了。針對錯誤,Python 提供了“安全合理”的退出機制,讓程式設計師能掌控局面。一旦你的 Python 由於錯誤崩潰,解釋程式就會轉出一個“堆疊跟蹤”,那裡面有可用到的全部資訊,包括你程式崩潰的原因以及是那段程式碼(檔名、行數、行數呼叫等等)出錯了。這些錯誤被稱為異常。如果在執行時發生這樣的錯誤,Python 使你能夠監控這些錯誤並進行處理。這些異常處理可以採取相應的措施,例如解決問題、重定向程式流、執行清除或維護步驟、正常關閉應用程式、亦或乾脆忽略掉。無論如何,這都可以有效的縮減開發週期中的除錯環節。Python 的健壯性對軟體設計師和使用者而言都是大有助益的。一旦某些錯誤處理不當,Python 也還能提供一些資訊,作為某個錯誤結果而產生的堆疊追蹤不僅可以描述錯誤的型別和位置,還
能指出程式碼所在模組。
1.3.10  高效的快速原型開發工具
我們之前已經提到了 Python 是多麼的易學易讀。但是,你或許要問了,BASIC 也是如此啊,Python 有什麼出類拔萃的呢?與那些封閉僵化的語言不同,Python 有許多面向其他系統的介面,它的功能足夠強大,本身也足夠強壯,所以完全可以使用 Python 開發整個系統的原型。顯然,傳統的編譯型語言也能實現同樣的系統建模,但是 Python 工方面的簡潔性讓我們可以在同樣的時間內遊刃有餘的完成相同的工作。此外,大家已經為 Python 開發了為數眾多的擴充套件庫,所以無論你打算開發什麼樣的應用程式,都可能找到先行的前輩。你所要做的全部事情,就是來個“即插即用”(當然,也要自行配置一番)!只要你能想得出來,Python 模組和包就能幫你實現。Python 標準庫是很完備的,如果你在其中找不到所需,那麼第三方模組或包就會為你完成工作提供可能。                              
1.3.11  記憶體管理器
C 或者 C++最大的弊病在於記憶體管理是由開發者負責的。所以哪怕是對於一個很少訪問、修改和管理記憶體的應用程式,程式設計師也必須在執行了基本任務之外履行這些職責。這些加諸在開發者身上的沒有必要的負擔和責任常常會分散精力。在 Python 中,由於記憶體管理是由 Python 直譯器負責的,所以開發人員就可以從記憶體事務中解放出來,全神貫注於最直接的目標,僅僅致力於開發計劃中首要的應用程式。這會使錯誤更少、程式更健壯、開發週期更短。
1.3.12  解釋性和(位元組)編譯性
Python 是一種解釋型語言,這意味著開發過程中沒有了編譯這個環節。一般來說,由於不是以本地機器碼執行,純粹的解釋型語言通常比編譯型語言執行的慢。然而,類似於 Java,Python實際上是位元組編譯的,其結果就是可以生成一種近似機器語言的中間形式。這不僅改善了 Python的效能,還同時使它保持瞭解釋型語言的優點。

說明:轉自 《Python核心程式設計 第二版》 ,感謝編者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2140252/,如需轉載,請註明出處,否則將追究法律責任。

相關文章