python的前世與今生
來源:
奇酷教育 發(fā)表于:
2022-08-23 16:12:08
python的前世與今生
python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)。1989年的圣誕節(jié)期間,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創(chuàng)造一種C和shell之間,功能全面,易學易用,可拓展的語言。并且在他去谷歌面試的時候簡歷只寫了一句話,就是我創(chuàng)造了Python,可見能力確實不一般。
吉多·范羅蘇姆
我們的前輩有一個非常親民的名字叫做“龜叔”
在80年代,個人電腦的配置較之如今是極低的,程序員不得不努力思考如何最大化利用空間,以寫出符合機器口味的程序。而正是因為這一點,讓龜叔感到苦惱。他認為這樣編寫程序實在是太過于耗費時間,于是他想到了shell。shell可以像膠水一樣,將UNIX下的許多功能連接在一起。許多C語言下上百行的程序,在shell下只用幾行就可以完成。然而,shell的本質是調用命令,它并不是一個真正的語言,shell不能全面的調動計算機的功能。
于是,龜叔開始思考,是否能設計一款語言,使它同時具備C與shell的優(yōu)點,既能夠全面調用計算機的功能接口,又可以輕松編寫程序。
所以龜叔當時一直在尋找這樣一種的語言,既可以像命令那樣簡潔明了,又可以和C語言的功能相媲美。不過當時那個年代,幾乎是找不到的,不過找到了一種稍微類似的語言,就是傳說中的ABC語言
1989年圣誕節(jié)期間,在阿姆斯特丹,龜叔為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序,做為ABC 語言的一種繼承。而取名python,是取自他摯愛的一部電視劇Monty Python’s Flying Circus 。
1991年,第一個Python編譯器誕生,它是用C語言實現(xiàn)的,并能夠調用C庫(.so文件)。從一出生,Python已經具有了:類(class),函數(function),異常處理(exception),包括表(list)和詞典(dictionary)在內的核心數據類型,以及模塊(module)為基礎的拓展系統(tǒng)。
龜叔為防止重蹈ABC的覆轍,著重注意python的可擴展性,并且也沿用了C中的大部分語法習慣,而這,使python得到龜叔同事的歡迎。他們迅速的反饋使用意見,并參與到Python的改進。
python誕生在一個幸運的時間。1990年代初,個人計算機開始進入普通家庭。Intel發(fā)布了486處理器,windows發(fā)布window 3.0開始的一系列視窗系統(tǒng),計算機的性能大大提高。并且由于Internet隨個人電腦的普及而為人們所廣知,許多程序員以及資深計算機用戶頻繁使用Internet進行交流,這使得python沒有了硬件上的束縛與傳播上的困難,再加上python易于使用的特點,使python得到了一定程度上的傳播。
龜叔維護了一個maillist,python用戶通過郵件進行交流。因為python用戶來自許多領域,有不同的背景,對python也有不同的需求。python相當的開放,又容易拓展,所以當用戶不滿足于現(xiàn)有功能,很容易對python進行拓展或改造。隨后,這些用戶將改動發(fā)給龜叔,并由龜叔決定是否將新的特征加入到python或者標準庫中。這就使得不同領域的優(yōu)點集中于python。
后來的python2.0,從maillist的開發(fā)方式,轉為完全開源的開發(fā)方式,(開源:由于Internet讓信息交流成本大大下降,所出現(xiàn)的一種新的軟件開發(fā)模式)python的數據庫的擴展速度與傳播速度也由此更進一步。
到今天,Python的框架已經確立。Python語言以對象為核心組織代碼(Everything is object),支持多種編程范式(multi-paradigm),采用動態(tài)類型(dynamic typing),自動進行內存回收(garbage collection)。Python支持解釋運行(interpret),并能調用C庫進行拓展。Python有強大的標準庫 (battery included)。由于標準庫的體系已經穩(wěn)定,所以Python的生態(tài)系統(tǒng)開始拓展到第三方包。
python干嘛用的?
Python可以應用于眾多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等眾多領域。目前業(yè)內幾乎所有大中型互聯(lián)網企業(yè)都在使用Python,如:Youtube、Dropbox、BT、、Google、Yahoo!、Facebook、NASA、Quora(中國知乎)、豆瓣、知乎、百度、騰訊、汽車之家、美團等。
目前Python主要應用領域
云計算: 云計算最火的語言, 典型應用OpenStack
WEB開發(fā): 眾多優(yōu)秀的WEB框架,眾多大型網站均為
Python開發(fā) ,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
系統(tǒng)運維: 運維人員必備語言
金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態(tài)語言的Python,語言結構清晰簡單,庫豐富,成熟穩(wěn)定,科學計算和統(tǒng)計分析都很牛逼,生產效率遠遠高于c,c++,java,尤其擅長策略回測
圖形GUI: PyQT, WxPython,TkInter
Python在一些公司的應用
谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發(fā)
CIA: 美國中情局網站就是用Python開發(fā)的
NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
YouTube:世界上最大的視頻網站YouTube就是用Python開發(fā)的
Dropbox:美國最大的在線云存儲網站,全部用Python實現(xiàn),每天網站處理10億個文件的上傳和下載
Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發(fā)
Facebook:大量的基礎庫均通過Python實現(xiàn)的
Redhat: 世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
豆瓣: 公司幾乎所有的業(yè)務均是通過Python開發(fā)的
知乎: 國內最大的問答社區(qū),通過Python開發(fā)(國外Quora)
春雨醫(yī)生:國內知名的在線醫(yī)療網站是用Python開發(fā)的
除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。
Python的種類
Cpython
Python的官方版本,使用C語言實現(xiàn),使用最為廣泛,CPython實現(xiàn)會將源文件(py文件)轉換成字節(jié)碼文件(pyc文件),然后運行在Python虛擬機上。
Jyhton
Python的Java實現(xiàn),Jython會將Python代碼動態(tài)編譯成Java字節(jié)碼,然后在JVM上運行。
IronPython
Python的C#實現(xiàn),IronPython將Python代碼編譯成C#字節(jié)碼,然后在CLR上運行。(與Jython類似)
PyPy(特殊)
Python實現(xiàn)的Python,將Python的字節(jié)碼字節(jié)碼再編譯成機器碼。
RubyPython、Brython ...
python 設計定位
Python的設計哲學是“優(yōu)雅”、“明確”、“簡單”。因此,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發(fā)者中通常是難以忍受的。Python開發(fā)者的哲學是[“用一種方法,最好是只有一種方法來做一件事”]。在設計Python語言時,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由于這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開發(fā)。這些準則被稱為Python格言。在Python解釋器內運行import this可以獲得完整的列表。
Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化。一些針對非重要部位的加快運行速度的補丁通常不會被合并到Python內。所以很多人認為Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向于使用JIT技術,或者用使用C/C++語言改寫這部分程序??捎玫腏IT技術是PyPy。
Python是完全面向對象的語言。函數、模塊、數字、字符串都是對象。并且完全支持繼承、重載、派生、多繼承,有益于增強源代碼的復用性。Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
雖然Python可能被粗略地分類為“腳本語言”(script language),但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態(tài)編程語言,原因是“腳本語言”泛指僅作簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,并不能與Python相提并論。
Python本身被設計為可擴充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。因此,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調用相應的模塊?!禤ython技術手冊》的作者馬特利(Alex Martelli)說:“這很難講,不過,2004 年,Python 已在Google 內部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場合使用 C++,在快速開發(fā)時候使用 Python。”