人生苦短,我用Python | Python簡史

點擊藍字關注嘉爲科技python


2017年,根據 IEEE Spectrum 發佈的研究報告顯示,Python成爲世界上最受歡迎的語言,C 和 Java 分別位居第二和第三位。linux



做爲近幾年最火的編程語言Python,甚至攻陷了教育界。android


2017年10月11日,教育部考試中心發佈了「關於全國計算機等級考試(NCRE)體系調整」的通知,決定自2018年3月起,在計算機二級考試中加入 「Python語言程序設計」科目。程序員


另外,Python也將取代VB,被歸入浙江省高考內容,山東省在其2017年秋季正式出版的《小學信息技術》,也大幅度引入了 Scratch、Python 等編程語言。web



近兩年日新月異的Python,其實歷史悠久,是和Java同時代的語言,開源已有20多年。
正則表達式


01算法

Python的起源shell

Python的做者是Guido von Rossum(吉多·範羅蘇姆),荷蘭人,1982年得到阿姆斯特丹大學的數學和計算機科學的碩士學位。數據庫


Guido von Rossumexpress


在開發Python以前,Guido von Rossum在CWI(Centrum voor Wiskunde en Informatica,國家數學和計算機科學研究院)參與到ABC語言的開發。ABC是一種教學語言,是專門爲非專業程序員設計的,目標是「讓用戶感受更好」。ABC語言但願讓編程語言變得容易閱讀,容易使用,容易記憶,容易學習,並以此來激發人們學習編程的興趣。

 

好比下面是一段來自Wikipedia的ABC程序,這個程序用於統計文本中出現的詞(word)的總數:


HOW TO RETURN words document:

   PUT {} IN collection

   FOR line IN document:

      FOR word IN split line:

         IF word not.in collection:

            INSERT word IN collection

   RETURN collection

上面的函數讀起來就像一段天然的文字。


一個Python程序員應該很容易理解這段程序。HOW TO用於定義一個函數,ABC語言使用冒號(:)和縮進來表示程序塊(C語言使用{}來表示程序塊),行尾沒有分號,for和if結構中也沒有括號()。若是將HOW TO改成def,將PUT行改成collection = [],將INSERT行改成collection.append(word),這就幾乎是一個標準的Python函數。

 

儘管已經具有了良好的可讀性和易用性,ABC語言最終沒有流行起來。

 

一方面,ABC語言編譯器須要配置比較高的電腦才能運行,而80年代的硬件配置很是低(在今天看來),早期的Macintosh只有8MHz的CPU主頻和128KB的RAM,一個大的數組就能佔滿內存,至於動態類型、面向對象等等,只能讓電腦陷入癱瘓。

 

另外,除了硬件上的困難,ABC語言自己也存在一些致命問題:好比可擴展性差、不能直接進行IO、過渡革新增大了程序員的學習難度、編譯器很大致使傳播困難等。


IBM tape drive:讀寫磁帶


1989年,爲了打發無聊的聖誕節假期,Guido開始開發一種新的腳本解釋語言-Python,命名源自一部他熱愛的英國喜劇《蒙提·派森的飛行馬戲團》(Monty Python and the Flying Circus)。


02

Python的發展

1991年,第一個Python編譯器(同時也是解釋器)誕生。Python是從ABC發展起來的,主要受到了Modula-3(另外一種至關優美且強大的語言,爲小型團體所設計的)的影響,而且結合了Unix shell和C的習慣。

 

Guido認爲ABC語言沒有成功的緣由,是由於ABC沒有開源,因此在Python上就特別重視開源和與其它語言的結合。


它常被暱稱爲膠水語言,可以把用其餘語言製做的各類模塊(尤爲是C/C++)很輕鬆地聯結在一塊兒。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),而後對其中有特別要求的部分,用更合適的語言改寫,好比3D遊戲中的圖形渲染模塊,性能要求特別高,就能夠用C/C++重寫,然後封裝爲Python能夠調用的擴展類庫。


最初的Python logo:

由Guido的兄弟Just von Rossum設計


最初的Python徹底由Guido本人開發,得到了Guido同事們的熱烈歡迎,他們反饋使用意見,並參與到Python的改進中去。Guido和一些同事構成Python的核心團隊,將本身大部分的業餘時間用於hack Python,隨後擴展到CWI以外。

 

而這段時期,正處在計算機行業迅猛發展的90年代,我的計算機開始大量普及,進入普通家庭,計算機的性能也大大提到。硬件廠商開始渴求軟件的出現,以帶動硬件的更新換代,C++和Java也相繼流行,語言的易用性被提到了一個新的高度。


圖形化界面


同時,Internet也在悄然發生着變化。


1992年,Internet上的主機超過1百萬臺。1993年,Internet主幹網的速率提升到45Mbps。1999年MCI和WorldCom公司將美國的Internet主幹網速率提升到2.5Gbps,Internet上註冊的主機超過1千萬臺。


WWW的站點數目也急劇增加,1993年末只有627個,而1999年末則超過了950萬個,上網用戶數則超過2億。

 

Internet上提供了高級瀏覽WWW服務、電子郵件E-mail 服務等,許多程序員以及資深計算機用戶頻繁使用Internet進行交流 (包括email和newsgroup)。Internet讓信息交流成本大大降低,一種新的軟件開發模式開始流行:開源 (open source)。程序員利用業餘時間進行軟件開發,並開放源代碼。1991年,Linus在comp.os.minix新聞組上發佈了Linux內核源代碼,吸引大批hacker的加入。Linux和GNU相互合做,最終構成了一個充滿活力的開源平臺。

 

沒有硬件性能的瓶頸,Python又簡單易用,許多程序員開始將目光轉向Python。


Python將許多機器層面上的細節隱藏,交給編譯器處理,並凸顯出邏輯層面的編程思考。Python程序員能夠花更多的時間用於思考程序的邏輯,而不是具體的實現細節 (Guido有一件T恤,寫着:人生苦短,我用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升級成了物種豐富的熱帶雨林。


03

Python版本迭代歷史

  • 1994年01月,Python 1.0,增長了 lambda, map, filter and reduce;

  • 2000年10月16日,Python 2.0,加入了內存回收機制,構成了如今Python語言框架的基礎;

  • 2004年11月30日,Python 2.4,同年目前最流行的WEB框架Django 誕生;

  • 2006年09月19日,Python 2.5;

  • 2008年10月01日,Python 2.6;

  • 2008年12月03日,Python 3.0;

  • 2009年06月27日,Python 3.1;

  • 2010年07月03日,Python 2.7;

  • 2011年02月20日,Python 3.2;

  • 2012年09月29日,Python 3.3;

  • 2014年03月16日,Python 3.4;

  • 2015年09月13日,Python 3.5;

  • 2016年12月23日,Python 3.6;

  • 2018年03月10日,正式宣佈Python 2.7 的 EOL(停用)日期是 2020 年 1 月 1 日,接下來,將不會有任何更新,也不會再有源碼安全補丁;

  • 2018年06月27日,Python 3.7。


04

Python的設計定位

Python在設計上堅持了清晰劃一的風格,這使得Python成爲一門易讀、易維護,而且被大量用戶所歡迎的、用途普遍的語言。


Python的設計哲學是「優雅」、「明確」、「簡單」。所以,Perl語言中「老是有多種方法來作同一件事」的理念在Python開發者中一般是難以忍受的。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確的沒有或者不多有歧義的語法。因爲這種設計觀念的差別,Python源代碼一般被認爲比Perl具有更好的可讀性,而且可以支撐大規模的軟件開發。這些準則被稱爲Python格言。在Python解釋器內運行import this能夠得到完整的列表。


Python開發人員儘可能避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁一般不會被合併到Python內。因此不少人認爲Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的狀況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。


Python是徹底面向對象的語言。函數、模塊、數字、字符串都是對象,而且徹底支持繼承、重載、派生、多繼承,有益於加強源代碼的複用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。


雖然Python可能被粗略地分類爲「腳本語言」(script language),但實際上一些大規模軟件開發計劃例如Zope、Mnet及BitTorrent,Google也普遍地使用它。Python的支持者較喜歡稱它爲一種高級動態編程語言,緣由是「腳本語言」泛指僅做簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。


Python自己被設計爲可擴充的。並不是全部的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員可以輕鬆地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器自己也能夠被集成到其它須要腳本語言的程序內。所以,不少人還把Python做爲一種「膠水語言」(glue language)使用。使用Python將其餘語言編寫的程序進行集成和封裝。


在Google內部的不少項目,例如Google Engine使用C++編寫性能要求極高的部分,而後用Python或Java/Go調用相應的模塊。《Python技術手冊》的做者馬特利(Alex Martelli)說:「這很難講,不過,2004 年,Python 已在Google 內部使用,Google 召募許多 Python 高手,但在這以前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場合使用 C++,在快速開發時候使用 Python。」


05

Python的優勢和缺點

優勢

簡單:Python是一種表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣。它使你可以專一於解決問題而不是去搞明白語言自己。


易學:Python極其容易上手,由於Python有極其簡單的說明文檔 。


速度快:Python 的底層是用 C 語言寫的,不少標準庫和第三方庫也都是用 C 寫的,運行速度很是快。 


免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者能夠自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它作改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。


高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。


可移植性:因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。


解釋性:一個用編譯性語言好比C或C++寫的程序能夠從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程經過編譯器和不一樣的標記、選項完成。


運行程序的時候,鏈接/轉載器軟件把你的程序從硬盤複製到內存中而且運行。而Python語言寫的程序不須要編譯成二進制代碼。你能夠直接從源代碼運行 程序。


在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,而後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。


面向對象:Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。


可擴展性:若是須要一段關鍵代碼運行得更快或者但願某些算法不公開,能夠部分程序用C或C++編寫,而後在Python程序中使用它們。


可嵌入性:能夠把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。


豐富的庫:Python標準庫確實很龐大。它能夠幫助處理各類工做,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其餘與系統有關的操做。這被稱做Python的「功能齊全」理念。除了標準庫之外,還有許多其餘高質量的庫,如wxPython、Twisted和Python圖像庫等等。


規範的代碼:Python採用強制縮進的方式使得代碼具備較好可讀性。而Python語言寫的程序不須要編譯成二進制代碼。


缺點

單行語句和命令行輸出問題

不少時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,能夠較爲方便的在shell下完成簡單程序,不須要如Python同樣,必須將程序寫入一個.py文件。


獨特的語法

這也許不該該被稱爲侷限,可是它用縮進來區分語句關係的方式仍是給不少初學者帶來了困惑。即使是頗有經驗的Python程序員,也可能陷入陷阱當中。


運行速度慢

這裏是指與C和C++相比。


06

Python的應用

系統編程:提供API(Application Programming Interface應用程序編程接口),能方便進行系統維護和管理,Linux下標誌性語言之一,是不少系統管理員理想的編程工具。


圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。


數學處理:NumPy擴展提供大量與許多標準數學庫的接口。


文本處理:python提供的re模塊能支持正則表達式,還提供SGML,XML分析模塊,許多程序員利用python進行XML程序的開發。


數據庫編程:程序員可經過遵循Python DB-API(數據庫應用程序編程接口)規範的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等數據庫通訊。python自帶有一個Gadfly模塊,提供了一個完整的SQL環境。


網絡編程:提供豐富的模塊支持sockets編程,能方便快速地開發分佈式應用程序。不少大規模軟件開發計劃例如Zope,Mnet 及BitTorrent. Google都在普遍地使用它。


Web編程:應用的開發語言,支持最新的XML技術。


多媒體應用:Python的PyOpenGL模塊封裝了「OpenGL應用程序編程接口」,能進行二維和三維圖像處理。PyGame模塊可用於編寫遊戲軟件。


pymo引擎:PYMO全稱爲python memories off,是一款運行於Symbian S60V3,Symbian3,S60V5, Symbian3, Android系統上的AVG遊戲引擎。因其基於python2.0平臺開發,而且適用於建立秋之回憶(memories off)風格的AVG遊戲,故命名爲PYMO。


黑客編程:python有一個hack的庫,內置了你熟悉的或不熟悉的函數,可是缺乏成就感。


爬蟲:這兩年特別是網絡爬蟲火得一塌糊塗,10個寫爬蟲的9個在用Python。


07

Python的將來

著名數據科學網站 KDnuggets 發佈了 2018 年數據科學和機器學習工具調查結果,數據顯示,Python 做爲機器學習經常使用的編程語言正在不斷擴大領先優點,2017 年 Python 的使用率超過 50%,今年它的使用率上升至 66%,而 R 的使用率首次下跌,跌破 50%。



將來將是大數據和人工智能的時代,Python 對數據的處理,有着得天獨厚的優點,人工智能、機器學習的首選語言就是Python。

 

咱們有理由相信,Python 會愈來愈火。


本文彙編自網絡。

參考文章:

  • 做者:Vamei ,《Python簡史》,原文連接:

    http://www.cnblogs.com/vamei

  • 做者:Mr丶Ding,《Python簡介、發展歷史及特色》,原文連接:

    https://blog.csdn.net/MrDing991124/article/details/78536295

  • 《2018年數據科學語言&工具排名,Python完勝R語言


關於咱們


嘉爲科技 —— IT解決方案與服務領先者,騰訊藍鯨智雲全國首家受權技術合做夥伴,擁有嘉維藍鯨IT自動化運維、IT基礎架構服務、應用軟件開發、雲計算四大系列業務,提供自本地到雲端、從標準架構到定製開發的一系列優秀IT解決方案和服務,全新打造嘉維藍鯨IT自動化運維解決方案、CMDB解決方案、DevOps解決方案等,提高客戶信息化水平和市場競爭力,助力客戶的業務發展。

嘉爲集團 —— 成立於2001年,由嘉爲科技和嘉爲教育組成,於廣州、深圳、北京、上海設有分公司,融IT服務和培訓諮詢於一體,爲客戶提供解決方案、運維支持、軟件研發及培訓教育服務。歷經18年的發展和積累,嘉爲已成爲備受客戶讚譽的行業翹楚。


長按識別二維碼關注咱們


本文分享自微信公衆號 - 嘉爲科技(canway_service)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索