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