首頁 資料庫 mysql教程 Python快速教學(補充篇04):Python簡史

Python快速教學(補充篇04):Python簡史

Dec 21, 2016 pm 05:22 PM

Python的起源

Python的作者,Guido von Rossum,確實是荷蘭人。 1982年,Guido從阿姆斯特丹大學(University of Amsterdam)獲得了數學和電腦碩士學位。然而,儘管他算得上是一位數學家,但他更享受計算機帶來的樂趣。用他的話來說,儘管擁有數學和計算機雙料資質,他總趨向於做計算機相關的工作,並熱衷於做任何和編程相關的活兒。

Python快速教學(補充篇04):Python簡史

Guido von Rossum

在那個時候,他接觸並使用過諸如Pascal、C、 Fortran等語言。這些語言的基本設計原則是讓機器能更快運作。在80年代,雖然IBM和蘋果已經掀起了個人電腦浪潮,但這些個人電腦的配置很低 (在今天看來)。例如早期的Macintosh,只有8MHz的CPU主頻和128KB的RAM,一個大的陣列就能佔滿記憶體。所有的編譯器的核心是做最佳化,以便讓程式能夠運作。為了增進效率,語言也迫使程式設計師像電腦一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取電腦每一寸的能力。有人甚至認為C語言的指標在浪費記憶體。至於動態類型,記憶體自動管理,物件導向…… 別想了,那會讓你的電腦陷入癱瘓。

 

然而,這種思考方式讓Guido感到苦惱。 Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間 (即使他已經準確的知道瞭如何實現)。他的另一個選擇是shell。 Bourne Shell作為UNIX系統的解譯器(interPReter)已經長期存在。 UNIX的管理員常常用shell去寫一些簡單的腳本,以進行一些系統維護的工作,例如定期備份、檔案系統管理等等。 shell可以像膠水一樣,將UNIX下的許多功能連接在一起。許多C語言下上百行的程序,在shell下只用幾行就可以完成。然而,shell的本質是呼叫命令。它並不是一個真正的語言。比如說,shell沒有數值型的資料型態,加法運算都很複雜。總之,shell不能全面的調動計算機的功能。

(關於shell,你可以參考linux架構和Linux命令行與命令)

 

Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面調用計算機的功能接口,又可以像shell那樣,可以輕鬆的程式設計。 ABC語言讓Guido看到希望。 ABC是由荷蘭的CWI (Centrum Wiskunde & Informatica, 數學和計算機研究所)開發的。 Guido在CWI工作,並參與到ABC語言的發展。 ABC語言以教學為目的。與當時的大部分語言不同,ABC語言的目標是「讓使用者感覺更好」。 ABC語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學習,並以此來激發人們學習程式設計的興趣。例如以下是一段來自Wikipedia的ABC程序,這個程式用來統計文字中出現的字(Word)的總數:

 

HOW TO RETURN words document:

      FOR word IN split line:

         IF word not.in 

   RETURN collection

   

 

HOW TO用來定義一個函數。一個Python程式設計師應該很容易理解這段程式。 ABC語言使用冒號(:)和縮排表示程式區塊(C語言使用{}來表示程式區塊)。行尾沒有分號。 for和if結構中也沒有括號()。如果將HOW TO改為def,將PUT行改為collection = [],將INSERT行改為collection.append(word),這幾乎是一個標準的Python函數。上面的函數讀起來就像一段自然的文字。

 

儘管已經具備了良好的可讀性和易用性,ABC語言最終沒有流行起來。在當時,ABC語言編譯器需要比較高配置的電腦才能運作。而這些電腦的使用者通常精通計算機,他們更考慮程式的效率,而不是它的學習難度。除了硬體上的困難外,ABC語言的設計也存在一些致命的問題:

可拓展性差。 ABC語言不是模組化語言。如果想在ABC語言中增加功能,例如對圖形化的支持,就必須改變很多地方。

不能直接進行IO。 ABC語言不能直接操作檔案系統。儘管你可以透過諸如文字流的方式匯入數據,但ABC無法直接讀寫檔案。輸入輸出的困難對於電腦語言來說是致命的。你能想像一個打不開車門的跑車麼?

過度革新。 ABC用自然語言的方式來表達程序的意義,例如上面程式中的HOW TO (如何)。然而對於程式設計師來說,他們更習慣用function或define來定義一個函數。同樣,程式設計師也習慣了用等號(=)來分配變數。這儘管讓ABC語言顯得特別,但實際上增加了程式設計師的學習難度 (程式設計師大都掌握不只一種語言)。

傳播困難。 ABC編譯器很大,必須保存在磁帶(tape)上。當時Guido在訪問的時候,就必須有一個大磁鐵來為別人安裝ABC編譯器。 這樣,ABC語言就很難快速傳播。

Python快速教學(補充篇04):Python簡史

IBM tape drive:讀寫磁帶

 

1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯/解釋器。 Python來自Guido所摯愛的電視劇Monty Python’s Flying Circus (BBC1960-1970年代播放的室內情境幽默劇,以當時的英國生活為素材)。他希望這個新的叫做Python的語言,能實現他的理念(一種C和shell之間,功能全面,易學易用,可拓展的語言)。 Guido作為一個語言設計愛好者,已經有過設計語言的(不很成功)的嘗試。這一次,也不過是一次純粹的hacking行為。

 

Python的誕生

1991年,第一個Python編譯器(同時也是解釋者)誕生。它是用C語言實作的,並且能夠呼叫C函式庫(.so檔)。從一出生,Python已經具有了:類別(class),函數(function),異常處理(exception),包括表(list)和字典(dictionary)在內的核心資料類型,以及模組(module)為基礎的拓展系統。

Python快速教學(補充篇04):Python簡史

最初的Python logo: 由Guido的兄弟Just von Rossum設計

Python語法很多來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,例如強制縮排。但這些文法規定讓Python容易讀。另一方面,Python聰明的選擇服從一些慣例(特別是C語言的慣例)。例如使用等號賦值,使用def來定義函數。 Guido認為,如果「常識」上建立的東西,就沒有必要過度糾結。

Python從一開始就特別在意可拓展性(extensibility)。 Python可以在多個層次拓展。從高層上,你可以引入.py檔。在底層,你可以引用C語言的函式庫。 Python程式設計師可以快速的使用Python寫.py檔作為拓展模組。但當性能是考慮的重要因素時,Python程式設計師可以深入底層,寫C程序,編譯為.so檔引入到Python中使用。 Python就好像是使用鋼建造房一樣,先規定好大的框架。而程式設計師可以在此框架下相當自由的拓展或更改。

最初的Python完全由Guido本人開發。 Python得到Guido同事的歡迎。他們迅速的回饋使用意見,並參與Python的改進。 Guido和一些同事組成Python的核心團隊。他們將自己大部分的業餘時間用於hack Python (也包括工作時間,因為他們將Python用於工作)。隨後,Python拓展到CWI以外。 Python將許多機器層面上的細節隱藏,交給編譯器處理,並凸顯出邏輯層面的程式思考。 Python程式設計師可以花更多的時間用於思考程式的邏輯,而不是具體的實作細節 (Guido有一件T卹,寫著:人生苦短,我用Python)。這項特徵吸引了廣大的程式設計師。 Python開始流行。

 

我們不得不暫停我們的Python時間,轉而看一看這時的電腦概況。 1990年代初,個人電腦開始進入一般家庭。 Intel發布了486處理器,windows發布從window 3.0開始的一系列視窗系統。計算機的性能大大提高。程式設計師開始關注電腦的易用性  (例如圖形化介面)。

Python快速教學(補充篇04):Python簡史

Windows 3.0

由於電腦效能的提高,軟體的世界也開始隨之改變。硬體足以滿足許多個人電腦的需求。硬體廠商甚至渴望高需求軟體的出現,以帶動硬體的更新換代。 C++和java相繼流行。 C++和Java提供了物件導向的程式設計範式,以及豐富的物件函式庫。在犧牲了一定的效能的代價下,C++和Java大大提高了程式的產量。語言的易用性被提到一個新的高度。我們還記得,ABC失敗的一個重要原因是硬體的效能限制。從這方面說,Python要比ABC幸運許多。

另一個悄悄發生的改變是Internet。 1990年代還是個人電腦的時代,windows和Intel挾PC以令天下,盛極一時。儘管Internet為主體的資訊革命尚未到來,但許多程式設計師以及資深電腦使用者已經在頻繁使用Internet進行交流 (包括email和newsgroup)。 Internet讓資訊交流成本大為下降。新的軟體開發模式開始流行:開源 (open source)。程式設計師利用業餘時間進行軟體開發,並開放原始碼。 1991年,Linus在comp.os.minix新聞群組上發布了Linux內核原始碼,吸引大批hacker的加入。 Linux和GNU相互合作,最終構成了一個充滿活力的開源平台。

 

硬體效能不是瓶頸,Python又容易使用,所以許多人開始轉向Python。 Guido維護了一個maillist,Python用戶就透過郵件交流。 Python使用者來自許多領域,有不同的背景,對Python也有不同的需求。 Python相當的開放,又容易拓展,所以當使用者不滿足於現有功能,很容易對Python進行拓展或改造。隨後,這些使用者將改動發給Guido,並由Guido決定是否將新的特徵加入Python或標準庫。如果程式碼能被納入Python本身或標準函式庫,這將極大的榮譽。 Python自身也因此變得更好。

(Guido不得不作出許多決定,這也是他被稱為Benevolent Dictator For Life的原因)

Python被稱為“Battery Included”,是說它以及其標準庫的功能強大。這些都是整個社區的貢獻。 Python的開發者來自不同領域,他們將不同領域的優點帶給Python。例如Python標準函式庫中的正規表示(regular expression)是參考Perl,而lambda, map, filter, reduce函數參考Lisp。 Python本身的一些功能以及大部分的標準函式庫來自社群。 Python的社群不斷擴大,進而擁有了自己的newsgroup,網站(python.org),以及基金 (Python Software Foundation)。從Python 2.0開始,Python也從maillist的開發方式,轉為完全開源的開發方式。社區氣氛已經形成,工作被整個社區分擔,Python也獲得了更高速的發展。

(由於Guido享有絕對的仲裁權,所以在Python早期maillist的開發時代,不少愛好者相當擔心Guido的生命。他們甚至作出假設:如果Guido掛了的話,Python會怎樣。見If Guido was hit by a bus)

到今天,Python的框架已經確立。 Python語言以物件為核心組織程式碼(Everything is object),支援多種程式設計範式(multi-paradigm),採用動態類型(dynamic typing),自動進行記憶體回收(garbage collection)。 Python支援解釋運行(interpret),並能呼叫C函式庫進行拓展。 Python有強大的標準函式庫 (battery included)。由於標準函式庫的系統已經穩定,所以Python的生態系開始拓展到第三方包。這些包,如Django, web.py, wxpython, numpy, matplotlib,PIL,將Python升級成了物種豐富的熱帶雨林。

 

今天Python已經進入3.0的時代。由於Python 3.0向後不相容,所以從2.0到3.0的過渡並不容易。另一方面,Python的效能依然值得改進,Python的運算效能低於C++和Java(請參閱Google的討論)。 Python依然是發展中的語言。我期待看到Python的未來。

 

Python啟示錄

Python崇尚優美、清晰、簡單,是一個優秀且廣泛使用的語言(TIOBE語言排行第八,Google的第三大開發語言,Dropbox的基礎語言,豆瓣的伺服器語言) 。這個世界並不缺乏優秀的語言,但Python的發展史作為一個代表,帶給我許多啟示。

在Python的開發過程中,社群扮演了重要的角色。 Guido自認為自己不是全能型的程式設計師,所以他只負責訂製框架。如果問題太複雜,他會選擇繞過去,也就是cut the corner。這些問題最終由社區中的其他人解決。社區中的人才是異常豐富的,就連創建網站,籌集基金這樣與開發稍遠的事情,也有人樂意處理。現今的專案開發越來越複雜,越來越龐大,合作以及開放的心態成為專案最終成功的關鍵。

Python從其他語言中學到了很多,無論是已經進入歷史的ABC,還是仍然在使用的C和Perl,以及許多沒有列出的其他語言。可以說,Python的成功代表了它所有藉鏡的語言的成功。同樣,Ruby借鑒了Python,它的成功也代表了Python某些方面的成功。每個語言都是混合體,都有它優秀的地方,但也有各種不同的缺陷。同時,一個語言「好與不好」的評判,往往受制於平台、硬體、時代等等外在原因。程式設計師經歷過許多語言之爭。我想,為什麼不以開放的心態和客觀的分析,去區分每個語言的具體優點和缺點,去區分內在和外在的因素。說不定哪一天發現,我不喜歡的某個語言中,正包含了我所需要的東西。

無論Python未來的命運如何,Python的歷史已經是本很有趣的小說。

 


 以上就是Python快速教學(補充篇04):Python簡史的內容,更多相關內容請關注PHP中文網(www.php.cn)!



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

與MySQL中使用索引相比,全表掃描何時可以更快? 與MySQL中使用索引相比,全表掃描何時可以更快? Apr 09, 2025 am 12:05 AM

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

可以在 Windows 7 上安裝 mysql 嗎 可以在 Windows 7 上安裝 mysql 嗎 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

說明InnoDB全文搜索功能。 說明InnoDB全文搜索功能。 Apr 02, 2025 pm 06:09 PM

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 InnoDB中的聚類索引和非簇索引(次級索引)之間的差異。 Apr 02, 2025 pm 06:25 PM

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

mysql 和 mariadb 可以共存嗎 mysql 和 mariadb 可以共存嗎 Apr 08, 2025 pm 02:27 PM

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。

mysql用戶和數據庫的關係 mysql用戶和數據庫的關係 Apr 08, 2025 pm 07:15 PM

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

RDS MySQL 與 Redshift 零 ETL 集成 RDS MySQL 與 Redshift 零 ETL 集成 Apr 08, 2025 pm 07:06 PM

數據集成簡化:AmazonRDSMySQL與Redshift的零ETL集成高效的數據集成是數據驅動型組織的核心。傳統的ETL(提取、轉換、加載)流程複雜且耗時,尤其是在將數據庫(例如AmazonRDSMySQL)與數據倉庫(例如Redshift)集成時。然而,AWS提供的零ETL集成方案徹底改變了這一現狀,為從RDSMySQL到Redshift的數據遷移提供了簡化、近乎實時的解決方案。本文將深入探討RDSMySQL零ETL與Redshift集成,闡述其工作原理以及為數據工程師和開發者帶來的優勢。

See all articles