人生苦短,我用 Python

我和 Python

我接觸 Python 并不算早,第一次運用 Python 寫消費系統的程序是2004年,那時分我曾經有了幾年的編程經歷。當然了,如今這年頭說早晚都不適宜,昨天我說2000年就開端運用 Vim 編程了,有小同伴回復,那年我才12,這……幾有點為難。

早期用 Python 主要寫一些服務器端的工具,后來也寫后端服務,再后來還寫過內容抓取、數據分析和 Alfred 的插件等一系列雜七雜八的東西,簡單的工具用 Shell 寫,復雜的和龐大的用 C 或 Java 實現,中間的三不管地帶,用 Python 就好,每次都不會讓你失望。2005到2006年那段時間我參加了一個類似 Corba 的分布式應用系統的開發,與國外的程序員合作,寫了大量的 Python 代碼。

Python 有什么好處?功能強大,使用簡單,語言唯一性的特征明顯(唯一性的意思就是你不能用十八種寫法實現一個功能),而且具備海量的第三方庫……Python 程序員最愛說的一句話是:人生苦短,我用 Python(也是 Python 之父的名言)。這句話與「PHP 是世界上最好的編程語言」一樣并世無雙,可謂「倚天不出,誰與爭鋒」。

Python 支持交互式編程、面向對象編程、函數式編程、面向切面編程、當然還有元編程。目前這門編程語言在兵器譜的排名是第四,前三位分別是Java、C 和C++。江湖上人稱四哥的,就是 Python。

人生苦短,我用 Python

Python 起源

Python 之父是 Guido van Rossum,荷蘭人。每個編程語言的作者都是一個技術傳奇,Guido 也不例外。他1982年從阿姆斯特丹大學畢業,獲得了數學和計算機兩個碩士學位,最愛做的事情就是編寫代碼。那個時代,流行的語言是匯編、C、Fortran 等,這些語言要求編程者對計算機的運行機制有精確的了解,以充分利用硬件資源達成自己的目標,因為硬件資源實在是太匱乏和寶貴了,程序員們需要榨干計算機硬件的每一滴血和汗才能完成任務。

這給 Guido 帶來很多困惑,用 C 實現個功能吧,完成度沒有問題,但是需要耗費大量時間。用 Shell 吧,面對復雜問題又束手無策。Shell 是 Unix/Linux 下的腳本語言,也叫膠水語言,它可以把系統的各種功能通過管道(比如:find . -name “*.java” | xargs grep chjq)的方式連接起來實現系統運維、定時任務、文件處理、程序安裝卸載等工作,但是處理復雜的數值運算或系統調用就很麻煩。這時候需求就來了,Guido 希望一門語言既能像 C 語言一樣能夠全面掌控計算機的資源,也能像 Shell 一樣使用簡單,還具備交互性編程能力,輕輕松松編寫一些小的工具包。

普通人 —— 比如我 —— 有了這種需求就會對自己說,再等等,也許隔壁馮老師會做出來呢。馮老師的想法就更簡樸了,我又不寫代碼,關我什么事。幸好 Guido 沒這么想,Guido 對自己說的是,放著我來!?1989年的冬天,Guido 為了度過一個有意義的圣誕節,或者為了打發一個無聊的假期,開始編寫 Python 語言的編譯器和解釋器,靈感來自教學語言 ABC(你不知道還有這種語言吧)。為什么叫 Python?因為 Guido 很喜歡 BBC 電視劇 —— 蒙提·派森的飛行馬戲團(Monty Python's Flying Circus)。ABC 則是由 Guido 參加設計的一種教學語言。Guido 一直認為 ABC 這種語言非常優美和強大,是專門為非「專業程序員」設計的。但是 ABC 語言并沒有成功,究其原因,Guido 認為是非開放造成的。Guido 決心在 Python 中避免這一錯誤,這一次他成功了。

1991年,第一個 Python 版本誕生,編譯器是 C 語言實現的,Python 語言可以非常方便的調用 C 語言實現的庫(這一點太重要了)。從一問世,Python 就是一個動態語言,面向對象編程的語言,具備類、函數、異常處理、列表(list)、詞典(dict)、元組等數據類型。

Python 的語法同時受到了 C 和 ABC 語言的影響,比如采用 def 來定義函數,比如等號賦值,比如強制縮進。如果你是個 C 或 Java 程序員,習慣了用大括號來劃分程序域 —— 其實大部分語言都是這么做的 —— 看到 Python 是用縮進來搞定這件事,你馬上會覺得「Holy shit」,其實這種做法來自 ABC,Guido 的想法是,如果「常識」上確立的東西,沒有必要過度糾結。當然,這種常識是 Guido 的常識,至于其他人,你們會習慣的。

事實也是如此, Python 吸引了大量的程序員,他們開始協同改進這門語言,Python 開始了改變世界的征程。

2000年10月16日 Python 2.0 發布,這次增加了實現完整的垃圾回收,并且支持 Unicode 編碼。Guido 在開發的過程中一直遵循了開放的原則,社區協作的模式從最初的郵件列表改為開源的方式,Python 吸收了大量開發者和編程語言的特點,比如,Python 中的正則表達參考了 Perl,而內置函數 lambda,map,reduce,filter 等則參考了 Lisp,無數優秀的程序員為 Python 添磚加瓦,Python 搞不定的,沒關系,我們用 C 實現,于是 Python 有了大量的函數庫,尤其在數據分析和科學計算領域。另外,函數在 Python 中是一等公民,所以 Python 同時也是一種函數式編程語言。

Python 穩步發展,成為了一代老牌編程語言。

Python 的應用

每個編程語言都有自己的 Hello World,Python 最為簡單。如果你有臺 Mac 電腦,Python 的 SDK 是默認安裝的。打開終端,輸入 python 進入 python shell 的交互界面,然后鍵入

>>> print “Hello World”

程序寫完了。

Python 這么簡單,是不是一門玩具語言呢?當然不是。NASA 的火箭發射儀表盤系統使用了 Python 的 Tkinter —— 支持實時響應的 GUI 庫。NASA 的太陽物理學分詞庫 SunPy 也是基于 Python 寫的。YouTube 基于開發速度的考慮,大部分代碼是 Python 實現的,YouTube 的流量有多大,老百姓不知道,程序員應該知道。Google、Dropbox 更是大量采用 Python 語言(Guido 工作過的兩個地方)。國內的豆瓣、知乎也是 Python 的重度使用者。

雖然 Python 已經被廣泛使用了,但前幾年它在兵器譜上總是排 8-12 的位置。最近兩年事情開始發生變化,去年 Python 開始迅速攀升至第五名,今年更進一步,排名第四。為什么會發生這種變化呢?并不是 Python 增加了什么了不得的特性,而是人工智能和機器學習的時代來臨了。

AI 時代的 Python

我來做一個不負責任的判斷,Python 將成為大數據、AI 和機器學習時代的第一編程語言。可以想象這樣一個場景,Python 和 Java、Go、C、C#、Ruby、PHP……坐在圓桌前開會,Python 抱著頭后仰在 Herman Miller 工程椅上,慵懶的對其他編程語言說:

對不起,我不是針對你,我是說,所有在座的各位,都只能掙第二。

當然了,這個語言范疇是限定在大數據、AI 和機器學習領域。但是,如果這個領域在未來的應用足夠廣泛,那 Python 直接滅掉 Java 當大哥也不是不可能的。

Python 性能這么差,對多核并發編程支持的也不好,并且長期分裂成了 Python 2 和 Python 3 兩個陣營,給開發者帶來了諸多不便和麻煩,為什么能后來者居上呢?

因為 Python 遵循了現代的木桶原理。

Python 的木桶原理

我在自己的小密圈(目前已經漲價到128元,因為貴即是好)提了一個問題:為什么很多數據分析和機器學習的框架都會選用 Python 做主要的開發或首選支持的語言呢?

一位女程序員穎兒的回答最靠譜:免費,簡潔,生態好,庫豐富,操心少;之前刷機器學習的題,用 C# 寫了一坨兒。結果人家引個 SciPy 庫,三行代碼搞定。

SciPy 是一個數值計算庫,NumPy 是 Python 另一個開源的數值計算擴展庫,Pandas 是基于 NumPy 的數據分析工具,matplotlib 是圖形繪制庫,最近火熱的 Scikit-learn 則是開源的機器學習框架。這些庫對于 Python 來說就三個字:「隨便用」。長此以往,圍繞 Python 語言構建出來的生態庫讓其他語言望塵莫及,尤其是在科學計算、數據分析和機器學習領域。

以前我們說「木桶原理」是講一只水桶能裝多少水取決于它最短的那塊木板,所以我們應該去思考和補齊自己的短板,才能成事。到了現代,知識爆炸信息擁堵,沒人有時間去補齊短板,能夠讓自己的長板足夠長就不錯了。短板怎么辦,找別人來補齊啊。能協作的組織和人才是最有生命力的。

Python 也是一樣。自誕生以來,一直保持了簡單、開放、語言工業化,具備良好的封裝、組合、嵌入能力,開發效率驚人。Python 把這些方面做到極致,其他的事情,留給別人去干嘛。

你們不是覺得 Python 慢么,自然有人給開發出 PyPy、Cython、Jython、Numba 這樣的編譯器工具來提高 Python 的效率。要進行科學計算、大數據分析,好了,SciPy、Pandas 誕生了,要機器學習,scikit-learn、Theano、Pylearn2 等機器學習庫開發出來了。Python 調用這些用 C 或者 Fortran 開發出來的庫比原生語言調用還方便,你說大家能不用 Python 么?

每當新事物來臨的時候,總有很多專家里手對新手們豎起一道高墻,比如機器學習總被放到學術研究和 CS 科班出身這堵墻的后面,讓人望而生畏。其實,機器學習這個領域,同樣是個金字塔,這些專家和博士以及人工智能算法的創造者們,屬于塔尖的極少數人,他們發現原理,實現算法,引領潮流,突破極限,然后呢?基于這些算法和原理開發應用和使用應用的,是廣大的程序員和人民群眾,他們可能沒有那么高深的數學知識,不知道 Regression 和 Decision Tree 算法,不了解散步矩陣……那我們可以用 Python 調包啊,只要那些包足夠成熟就好了。

也許未來每個人與機器溝通的每一句話,就是喚起了一段 Python 代碼呢?

Python 的分裂

Python 2 和 Python 3 曾經長期共存了數年之久,緣由很復雜,關于這個話題,足夠寫另一篇文章了。目前官方表示對 2 的支持到2020年,但 2 的生態庫遠遠大于 3,這就讓人很糾結。

關于該學哪個版本的常見問題,我的回復是,最好都學,語法區別并不是很大。

 

馬哥學習交流群

馬哥教育-Python開發-1群 335068227

馬哥教育-Python開發-2群 608459685

 

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code
云南快乐10分开奖直播