摘要:作者宋天龍來源科技大本營導(dǎo)語一切都始于年的那個圣誕節(jié),的誕生并不算恰逢其時,它崛起充滿了機(jī)遇巧合,也有其必然性。年的圣誕節(jié),開始編寫語言的編譯器。年發(fā)布的標(biāo)志著的框架基本確定。年月發(fā)布了系列的最后一個版本,主版本號為。
作者 | 宋天龍
來源 | AI科技大本營
導(dǎo)語:一切都始于1989年的那個圣誕節(jié),Python的誕生并不算恰逢其時,它崛起充滿了機(jī)遇巧合,也有其必然性。三十年間,Python技術(shù)不斷更迭,生態(tài)逐漸完善,加上互聯(lián)網(wǎng)、大數(shù)據(jù)、以及人工智能這一波波浪潮的推波助瀾,Python漸漸從小眾最終站上了現(xiàn)在的高度。
從歷史發(fā)展的角度出發(fā),我們才能看清Python崛起的偶然性和必然性。本文將結(jié)合技術(shù)和產(chǎn)業(yè)的發(fā)展,全面透析Python的演進(jìn)之路,幫助讀者理解是什么造就了如今的Python。
Python 1.0時代:起源與誕生Guido van Rossum(下面簡稱Guido)是Python語言之父,他于1982年從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計算機(jī)碩士雙學(xué)位,期間他接觸了很多的語言,包括Pascal,C,F(xiàn)ortran等。
在那個計算機(jī)資源貧乏的年代,像計算機(jī)一樣思考并編程是每個程序員必須面對的事情,這讓他非??鄲?;同時他又非常欣賞shell,shell簡單易編程的特性讓程序員更加專注于設(shè)計和邏輯本身,但shell本質(zhì)上是一個功能的調(diào)用,它沒有自己的數(shù)據(jù)類型,更無法全面調(diào)用計算機(jī)功能,因此shell也不算是一門“語言”。
因此,他希望找到一種語言既可以像使用shell一樣簡單,又可以和C語言的功能相媲美。不過這種語言在那個年代并不存在。
1989年的圣誕節(jié),Guido開始編寫Python語言的編譯器。Python這個名字來源于他喜歡的電視劇Monty Python’s Flying Circus,而不是表面意義上的“蟒蛇”。他希望這個新的語言,能符合他的理想:介于C和shell之間,功能全面、易學(xué)、易用又可拓展。
1991年,第一個Python編譯器誕生,這標(biāo)志著Python的第一個版本正式誕生。它基于C語言,并具備了基礎(chǔ)的類、函數(shù)、異常處理等功能特性,同時具備可擴(kuò)展性。Python語法很多來自C,但又受到ABC語言的強(qiáng)烈影響。例如來源于ABC語言強(qiáng)制縮進(jìn)的規(guī)定本身可以讓Python容易讀,但如果縮進(jìn)出錯卻會影響編譯和執(zhí)行。Python本身不以性能為重,但當(dāng)確實需要考慮性能時,Python程序員卻可以深入底層來編寫C程序,并編譯為.so文件引入到Python中使用。
Python語言的魅力在于讓程序員可以花更多的時間用于思考程序的邏輯,而不是具體的實現(xiàn)細(xì)節(jié),這一特性也得到Guido同事的歡迎。他們在反饋使用意見的同時也參與到Python的改進(jìn)中來,因此最初Guido和一些同事構(gòu)成了Python的核心團(tuán)隊,當(dāng)然,核心決策者還是Guido本人。隨后,Python的使用拓展到研究所之外,并吸引了越來越多的程序員。
但是,最初Python的使用非常小眾,因為在那個計算機(jī)資源非常有限的年代,大家都傾向于最大化榨取計算機(jī)資源并提升運算效率,而Python顯然不是為此而生。
Python 2.0時代:崛起最初發(fā)布時,Python在設(shè)計層面存在一些缺陷,例如以滿足跨語言、跨平臺進(jìn)行文本轉(zhuǎn)換、處理的要求的Unicode字符編碼標(biāo)準(zhǔn)在1994年才正式公布,所以一直以來Python 2及之前的版本對Unicode的支持并不完全。相信大家在使用Python 2版本處理中文時都遇到過各種問題。
2000年發(fā)布的Python 2.0標(biāo)志著Python的框架基本確定。重要框架方向包括:
簡單明確。在設(shè)計Python語言時,開發(fā)者傾向于選擇沒有或者很少有歧義的語法。由于這種設(shè)計觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開發(fā)。
面向?qū)ο?/strong>。任何Python的元素都可以視為對象,包括數(shù)據(jù)類型、類、函數(shù)、實例化元素等,完全支持繼承、重載關(guān)系,這有益于增強(qiáng)代碼的復(fù)用性。
動態(tài)類型。任何對象的數(shù)據(jù)類型都無需提前定義,拿來即用。即使在之前已經(jīng)預(yù)先定義,后期也可隨時修改。
膠水特性。Python本身被設(shè)計為可擴(kuò)充的,并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C、C++、Cython來編寫擴(kuò)充模塊。例如在Google對于Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。
可嵌入。你可以把Python的功能嵌入到C/C++程序中,從而實現(xiàn)Python功能在其他語言中的功能實現(xiàn)。
生態(tài)系統(tǒng)。Python有強(qiáng)大的標(biāo)準(zhǔn)庫,同時支持第三方庫和包的擴(kuò)展應(yīng)用,甚至可以自定義任何庫和包。Pypi(https://pypi.org/)是其第三方庫的倉庫,在這里你幾乎可以找到任何領(lǐng)域內(nèi)的功能庫。
解釋器機(jī)制。Python支持多種解釋器,例如CPython(官方版本,基于C語言開發(fā),也是使用最廣的Python解釋器)、IPython(基于CPython之上的一個交互式解釋器)、PyPy(一個追求執(zhí)行速度的Python解釋器,采用JIT技術(shù)對Python代碼進(jìn)行動態(tài)編譯)、Jython(運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行)、IronPython(和Jython類似,只不過運行在微軟.Net平臺上)。
1965年,戈登·摩爾提出了著名的摩爾定律,其內(nèi)容為:當(dāng)價格不變時,集成電路上可容納的元器件的數(shù)目,約每隔18-24個月便會增加一倍,性能也將提升一倍。在隨后超過半個世紀(jì)的時間里,個人計算機(jī)的發(fā)展日新月異,已經(jīng)由資源不足向資源過剩轉(zhuǎn)變。這客觀上為Python的應(yīng)用提供了基礎(chǔ)條件——只有在資源過剩的條件下,程序員才不會過度關(guān)注榨取性能。
隨著Python自身功能的完善以及生態(tài)系統(tǒng)的擴(kuò)展,Python在Web開發(fā)、網(wǎng)絡(luò)爬蟲、數(shù)據(jù)分析與數(shù)據(jù)挖掘、人工智能等應(yīng)用方面逐漸嶄露頭角。
Django和Flask引領(lǐng)的WEB開發(fā)模式2004年,目前最流行的WEB框架Django誕生。2010年,另一個流行的輕量級WEB框架Flask誕生。Django是一個WEB解決方案“全家桶”,其功能大而全,包含了幾乎所有WEB開發(fā)相關(guān)的組件和功能,它可以大大節(jié)省開發(fā)者在基礎(chǔ)組件、選型、適配等方面的時間和精力;而Flask只包含基本的配置,默認(rèn)依賴于兩個外部庫也可以自由替換,給開發(fā)者提供最大的自主空間。這兩類完全相反方向上的WEB開發(fā)模式,幾乎可以為所有開發(fā)者提供了很好的選型參照物:無論開發(fā)者想要一站式還是最大化自主解決方案,Python都能滿足。
此后,以豆瓣、春雨醫(yī)生、知乎、Dropbox、YouTube、CIA(美國中情局)等為代表的企業(yè)和機(jī)構(gòu)都基于Python做網(wǎng)站開發(fā),預(yù)示著Python應(yīng)用到WEB開發(fā)領(lǐng)域逐漸成為一種新興趨勢。
人人都能勝任的網(wǎng)絡(luò)爬蟲Python自帶的標(biāo)準(zhǔn)庫中,urllib、urllib2、requests庫對于簡單網(wǎng)頁的抓取實現(xiàn)非常簡單,即使在面對海量數(shù)據(jù)抓取需求時,第三方庫Scrapy也能應(yīng)對自如;再配合正則表達(dá)式庫re、網(wǎng)頁代碼解析BeautifulSoup、html和xml解析庫lxml、多線程庫threading等特性,使得Python在應(yīng)用到網(wǎng)絡(luò)爬蟲任務(wù)上時,只需要很少的開發(fā)量便能迅速完成任務(wù)?;赑ython簡單易學(xué)的特性,幾乎人人都能開發(fā)網(wǎng)絡(luò)爬蟲。
比shell更好用的自動化運維工具Python是跨語言和平臺的,幾乎所有Linux系統(tǒng)和MAC系統(tǒng)都自帶Python庫,Windows系統(tǒng)也可以自定義安裝。Python默認(rèn)的os、sys等庫可實現(xiàn)與操作系統(tǒng)的交互和執(zhí)行功能,更重要的是Python還能直接執(zhí)行系統(tǒng)終端命令。因此,使用Python編寫的系統(tǒng)運維和管理腳本在可讀性、性能、代碼重用度、擴(kuò)展性幾方面都優(yōu)于普通的shell腳本,在自動化運維方面應(yīng)用廣泛。
數(shù)據(jù)分析與科學(xué)計算三劍客2008年發(fā)布的Numpy、scipy和2009年發(fā)布的pandas是數(shù)據(jù)分析與科學(xué)計算的三劍客。
NumPy(Numeric Python的簡稱)是Python科學(xué)計算的基礎(chǔ)工具包,也是Python做數(shù)據(jù)計算的關(guān)鍵庫之一,同時又是很多第三方庫的依賴庫。
Scipy(Scientific Computing Tools for Python的簡稱)是一組專門解決科學(xué)和工程計算不同場景的主題工具包,它提供的主要功能側(cè)重于數(shù)學(xué)、函數(shù)等,例如積分和微分方程求解。Pandas(Python Data Analysis Library的簡稱)是一個用于Python數(shù)據(jù)分析的庫,它的主要作用是進(jìn)行數(shù)據(jù)分析和預(yù)處理。
Pandas提供用于進(jìn)行結(jié)構(gòu)化數(shù)據(jù)分析的二維表格型數(shù)據(jù)結(jié)構(gòu)DataFrame,類似于R中的數(shù)據(jù)框,能提供類似于數(shù)據(jù)庫中的切片、切塊、聚合、選擇子集等精細(xì)化操作,為數(shù)據(jù)分析提供便捷。另外,Pandas還提供了時間序列的功能,用于金融行業(yè)的數(shù)據(jù)分析。
除此之外,很多大型公司也都在使用Python完成不同類型的其他工作,其中不乏世界知名公司,如國外的Google、Facebook、NASA 、雅虎、YouTube等,國內(nèi)的網(wǎng)易、騰訊、搜狐、金山等。例如谷歌在Google Groups、Gmail、Google Maps等項目中將Python用作網(wǎng)絡(luò)應(yīng)用的后端;在Google Cloud Platform中的Google Cloud Storage本地部署環(huán)境中,gsutil也在Python 2基礎(chǔ)上開發(fā)和應(yīng)用。
后Python2與Python3時代:AI讓Python大放異彩2008年12月,Python 3發(fā)布。Python 3相對于Python 2的早期版本(主要是Python2.6之前)是一個較大的升級,它在設(shè)計的時候沒有考慮向下兼容,所以很多早期版本的Python程序無法在Python 3上運行。為了照顧早期的版本,推出過渡版本2.6——基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數(shù)。同時,Python還提供了Python 2到Python 3的Python文件轉(zhuǎn)換功能,以幫助開發(fā)者升級。
2010年7月發(fā)布了Python 2.x系列的最后一個版本,主版本號為2.7。大量Python 3的特性被反向遷移到了Python 2.7,2.7版本比2.6版本進(jìn)步非常多,同時擁有大量Python 3中的特性和庫,并且照顧了原有的Python開發(fā)人群。Python2.7也是當(dāng)前絕大多數(shù)Linux操作系統(tǒng)最新版本的默認(rèn)Python版本。
從2008年開始,Python 2與Python 3是并存發(fā)展的。但在2018年3月,Guido在郵件列表上宣布Python 2.7將于2020年1月1日終止支持,這意味著之后Python 2將不再被統(tǒng)一維護(hù),與之對應(yīng)的是主流第三方庫也不會再提供針對Python 2版本的開發(fā)支持。Python 2的時代即將過去。
這一時期,Python繼續(xù)以其獨特魅力吸引更多的開發(fā)者加入,但真正讓Python大放異彩的卻是AI(人工智能)的爆發(fā)。
AI并不是一個新生事物,而是從20世紀(jì)50年代就開始出現(xiàn),隨后經(jīng)過了大概20年的黃金時期,又分別在20世紀(jì)70年代和90年代兩次進(jìn)入寒冬期。從2006年開始,神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)的出現(xiàn),讓AI進(jìn)入爆發(fā)期。
在AI領(lǐng)域,Python擁有很多相關(guān)庫和框架。其中最著名的是:
sklearn:一個老牌機(jī)器學(xué)習(xí)庫,其neural_network庫可用來做神經(jīng)網(wǎng)絡(luò)訓(xùn)練。
PyTorch:由Facebook于2016年發(fā)布,它基于曾經(jīng)非常流行的Torch框架而來,為深度學(xué)習(xí)的普及邁出了重要一步,到目前為止它已經(jīng)是人們用來做學(xué)術(shù)研究的首選方案。
TensorFlow:谷歌于2015年研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng)。借助谷歌的強(qiáng)大號召力以及在人工智能領(lǐng)域的技術(shù)實力,它已經(jīng)成為目前企業(yè)真實生產(chǎn)環(huán)境中最流行的開源AI框架。更重要的是,它也是第一個(應(yīng)該也是唯一一個)經(jīng)過真實大規(guī)模生產(chǎn)環(huán)境(Google)檢驗過的框架。
在互聯(lián)網(wǎng)領(lǐng)域,F(xiàn)acebook和Google都是全球IT企業(yè)的標(biāo)桿,具備行業(yè)領(lǐng)導(dǎo)力和風(fēng)向指示意義。他們基于Python開發(fā)的AI庫(PyTorch和TensorFlow)已經(jīng)成為目前最流行的AI庫,而且“到底選擇PyTorch還是Tensorflow”仍然是一個具有爭議性的話題。
在AI時代,主要應(yīng)用場景包括:
計算機(jī)視覺:通過特定的圖片模式訓(xùn)練,讓計算機(jī)理解圖像中的物體甚至內(nèi)容。在這一領(lǐng)域我們熟悉的場景包括圖像識別、目標(biāo)識別和跟蹤。例如人臉識別便是圖像識別的典型領(lǐng)域,廣泛應(yīng)用到企業(yè)員工考勤、門店客戶識別、機(jī)場等公共領(lǐng)域反恐識別等。2011年,吳恩達(dá)創(chuàng)立的谷歌大腦項目,能夠在沒有任何先驗知識的情況下,僅僅通過觀看無標(biāo)注視頻學(xué)習(xí)到識別高級別的概念就能知道哪個是貓。
語音識別:該過程是計算機(jī)將人類的自然語言識別并轉(zhuǎn)換為文字的過程,廣泛應(yīng)用工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費電子產(chǎn)品等各個領(lǐng)域。身邊熟悉的場景例如通過語言對導(dǎo)航、APP、車載設(shè)備等做指令輸入,以及電信客服系統(tǒng)中的語音業(yè)務(wù)查詢和辦理。
自然語言理解:自然語言理解是一類任務(wù)的總稱,而并非是單一任務(wù)。它旨在讓計算機(jī)理解人類的語言所表達(dá)的表層和深層含義。目前場見的應(yīng)用場景包括自動問答系統(tǒng)、機(jī)器翻譯、信息檢索和過濾、信息抽取等。
個性化推薦:個性化推薦是一個相對成熟的領(lǐng)域,但基于深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò),可以將大量的復(fù)雜、抽象特征的數(shù)據(jù)預(yù)處理工作最大程度的簡化,甚至可以將海量特征經(jīng)過簡單處理后便直接丟到模型中便能獲得比例理想的效果。
游戲和競技:在該領(lǐng)域,很多科技公司用經(jīng)過訓(xùn)練后的AI與人類進(jìn)行對弈。早在20世紀(jì)90年代,由IBM開發(fā)的“深藍(lán)”與卡斯帕羅夫的世紀(jì)之戰(zhàn)已經(jīng)引起了世界的轟動;在2017年AlphaGo又擊敗排名世界圍棋冠軍柯潔,再一次讓世人感受到AI的強(qiáng)大威力。
在不同的領(lǐng)域,Python都能扮演非常重要的角色,因此,在國外的各大榜單中,Python都已經(jīng)成為最受歡迎的語言(或至少是之一)。不只在商業(yè)領(lǐng)域流行,國內(nèi)很多地區(qū)和教育機(jī)構(gòu)正將Python納入教材之中。比如Python進(jìn)入山東小學(xué)六年級的教材,浙江信息技術(shù)教材將放棄VB,改用Python 語言,Python列入全國計算機(jī)二級等級考試大綱等。
Python的未來發(fā)展在Python發(fā)展過程中,Guido一直是核心人物,甚至被稱為“終身仁慈獨裁者”,但在2018年經(jīng)歷了退出管理層風(fēng)波之后,他又在2019年以五大指導(dǎo)委員之一的身份重回決策層。這為Python迎來了新的治理方案:指導(dǎo)委員會模式。這種模式意味著Python的未來將從Guido一人決定變?yōu)?人決定,雖然比很多開源語言仍然有民主化空間(例如PHP的改進(jìn)由社區(qū)投票決定),但也算是一種從專制到民主的進(jìn)步。
有關(guān)Python的每個提升計劃,都是在PEP(Python Enhancement Proposal)列表中——每個版本新特性和變化都通過PEP提案經(jīng)過社區(qū)決策層討論、投票決議,最終才有我們看到的功能。
目前,Python的最新穩(wěn)定的主版本是3.7,Python 3.8也已經(jīng)有了預(yù)覽版,大概在2023年左右Python 4便會問世。在之后的時間里,Python會如何發(fā)展?我們可以從Python軟件基金會的董事會成員、CPython的核心開發(fā)人員Nick Coghlan的信息中略知一二:
首先,Python的PEP流程和制度沒有任何變化,通過增加新模塊和功能來增強(qiáng)的基礎(chǔ)能力。隨著Python 2在2020年不再維護(hù),社區(qū)在Python 3的資源和投入會相應(yīng)增加。
其次,不同解釋器的實現(xiàn)和功能擴(kuò)展還將繼續(xù)增強(qiáng),方向包括PyPy關(guān)于JIT編譯器生成和軟件事務(wù)內(nèi)存的嘗試,以及科學(xué)和數(shù)據(jù)分析社區(qū),對面向數(shù)組編程的探索等。
再次,嵌入式應(yīng)用的增強(qiáng),核心是與其他虛擬機(jī)運行時(如JVM和CLR)的集成和改進(jìn),尤其是在教育領(lǐng)域取得的進(jìn)展,可能會讓Python作為更受歡迎的嵌入式腳本語言,在更大的應(yīng)用程序中運行。
最后,對于為了兼容和維持Python 2的部分功能而存在于Python 3中的原有代碼,在后續(xù)版本中應(yīng)該會逐步優(yōu)化甚至去掉。而對于其他更改,則會根據(jù)情況棄用、提出警告、逐步替代以及保留。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/45224.html
摘要:華為的這種底氣正來自于其技術(shù)能力的塑造和強(qiáng)健。而華為云正是遺傳了華為的這種氣質(zhì),才能在成立僅一年多的時間里實現(xiàn)飛躍式的發(fā)展。華為云不僅繼承了華為的氣質(zhì),還將這種氣質(zhì)不斷發(fā)揚光大。三十功名塵與土,一朝入云膽氣生!從1987年2萬元起家,到2017年銷售收入突破6000億元,華為三十年的奮斗與拼搏、積累與沉淀,終于厚積薄發(fā)。2017年,華為云正式入場,它要像AWS那樣開創(chuàng)一個新的產(chǎn)業(yè)。華為云的氣...
摘要:但是在當(dāng)時,幾乎沒有人看好深度學(xué)習(xí)的工作。年,與和共同撰寫了,這本因封面被人們親切地稱為花書的深度學(xué)習(xí)奠基之作,也成為了人工智能領(lǐng)域不可不讀的圣經(jīng)級教材。在年底,開始為深度學(xué)習(xí)的產(chǎn)業(yè)孵化助力。 蒙特利爾大學(xué)計算機(jī)科學(xué)系教授 Yoshua Bengio從法國來到加拿大的時候,Yoshua Bengio只有12歲。他在加拿大度過了學(xué)生時代的大部分時光,在麥吉爾大學(xué)的校園中接受了從本科到博士的完整...
摘要:而這對于數(shù)據(jù)中心來說則是一種巨大的挑戰(zhàn)。顯然,這一切在目前仍未引起足夠的重視。自從Alpha GO戰(zhàn)勝人類圍棋選手以來,AI就成為了整個商業(yè)社會中熱度最高的一個名詞。在AI的背后是對傳統(tǒng)商業(yè)模式的巨大顛覆和對社會生產(chǎn)力的空前解放。雖然AI很可能在未來淘汰掉一部分重復(fù)性勞動很高的工作崗位,但因此所釋放出的勞動力將在未來把人類的創(chuàng)造力推向新的高峰。但除了已經(jīng)淪為陳詞濫調(diào)的AI光明未來,在實際的應(yīng)...
摘要:年云棲大會在杭州舉行,據(jù)主辦方介紹本次云棲大會吸引了五萬多人參會,但是在密集的會議中又有哪些亮點值得關(guān)注領(lǐng)導(dǎo)致辭很無聊每次重要的大會,都離不開一些政府要員們的參與,但是在高新技術(shù)的互聯(lián)網(wǎng),云計算,大數(shù)據(jù)領(lǐng)域真心不敢恭維,除了讓整個會議前半場 2016年云棲大會在杭州舉行,據(jù)主辦方介紹本次云棲大會吸引了五萬多人參會,但是在密集的會議中又有哪些亮點值得關(guān)注?領(lǐng)導(dǎo)致辭很無聊每次重要的大會,都離不開...
閱讀 2825·2021-11-25 09:43
閱讀 977·2021-10-11 10:57
閱讀 2477·2020-12-03 17:20
閱讀 3716·2019-08-30 14:05
閱讀 2421·2019-08-29 14:00
閱讀 1990·2019-08-29 12:37
閱讀 1660·2019-08-26 11:34
閱讀 3201·2019-08-26 10:27