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