
作者 | 宋天龍
來源 | 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ī)資源并提升運(yùn)算效率,而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的框架基本確定。重要框架方向包括:
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ù)。基于Python簡單易學(xué)的特性,幾乎人人都能開發(fā)網(wǎng)絡(luò)爬蟲。
比shell更好用的自動化運(yùn)維工具
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)運(yùn)維和管理腳本在可讀性、性能、代碼重用度、擴(kuò)展性幾方面都優(yōu)于普通的shell腳本,在自動化運(yùn)維方面應(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上運(yùn)行。為了照顧早期的版本,推出過渡版本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ù)以其獨(dú)特魅力吸引更多的開發(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)庫和框架。其中最著名的是:
在互聯(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)用場景包括:
在不同的領(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一直是核心人物,甚至被稱為“終身仁慈獨(dú)裁者”,但在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ī)運(yùn)行時(如JVM和CLR)的集成和改進(jìn),尤其是在教育領(lǐng)域取得的進(jìn)展,可能會讓Python作為更受歡迎的嵌入式腳本語言,在更大的應(yīng)用程序中運(yùn)行。
最后,對于為了兼容和維持Python 2的部分功能而存在于Python 3中的原有代碼,在后續(xù)版本中應(yīng)該會逐步優(yōu)化甚至去掉。而對于其他更改,則會根據(jù)情況棄用、提出警告、逐步替代以及保留。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10