亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

人生苦短,我用 Python

我和 Python

我接觸 Python 并不算早,第一次運(yùn)用 Python 寫(xiě)消費(fèi)系統(tǒng)的程序是2004年,那時(shí)分我曾經(jīng)有了幾年的編程經(jīng)歷。當(dāng)然了,如今這年頭說(shuō)早晚都不適宜,昨天我說(shuō)2000年就開(kāi)端運(yùn)用 Vim 編程了,有小同伴回復(fù),那年我才12,這……幾有點(diǎn)為難。

早期用 Python 主要寫(xiě)一些服務(wù)器端的工具,后來(lái)也寫(xiě)后端服務(wù),再后來(lái)還寫(xiě)過(guò)內(nèi)容抓取、數(shù)據(jù)分析和 Alfred 的插件等一系列雜七雜八的東西,簡(jiǎn)單的工具用 Shell 寫(xiě),復(fù)雜的和龐大的用 C 或 Java 實(shí)現(xiàn),中間的三不管地帶,用 Python 就好,每次都不會(huì)讓你失望。2005到2006年那段時(shí)間我參加了一個(gè)類似 Corba 的分布式應(yīng)用系統(tǒng)的開(kāi)發(fā),與國(guó)外的程序員合作,寫(xiě)了大量的 Python 代碼。

Python 有什么好處?功能強(qiáng)大,使用簡(jiǎn)單,語(yǔ)言唯一性的特征明顯(唯一性的意思就是你不能用十八種寫(xiě)法實(shí)現(xiàn)一個(gè)功能),而且具備海量的第三方庫(kù)……Python 程序員最愛(ài)說(shuō)的一句話是:人生苦短,我用 Python(也是 Python 之父的名言)。這句話與「PHP 是世界上最好的編程語(yǔ)言」一樣并世無(wú)雙,可謂「倚天不出,誰(shuí)與爭(zhēng)鋒」。

Python 支持交互式編程、面向?qū)ο缶幊?、函?shù)式編程、面向切面編程、當(dāng)然還有元編程。目前這門(mén)編程語(yǔ)言在兵器譜的排名是第四,前三位分別是Java、C 和C++。江湖上人稱四哥的,就是 Python。

人生苦短,我用 Python

Python 起源

Python 之父是 Guido van Rossum,荷蘭人。每個(gè)編程語(yǔ)言的作者都是一個(gè)技術(shù)傳奇,Guido 也不例外。他1982年從阿姆斯特丹大學(xué)畢業(yè),獲得了數(shù)學(xué)和計(jì)算機(jī)兩個(gè)碩士學(xué)位,最愛(ài)做的事情就是編寫(xiě)代碼。那個(gè)時(shí)代,流行的語(yǔ)言是匯編、C、Fortran 等,這些語(yǔ)言要求編程者對(duì)計(jì)算機(jī)的運(yùn)行機(jī)制有精確的了解,以充分利用硬件資源達(dá)成自己的目標(biāo),因?yàn)橛布Y源實(shí)在是太匱乏和寶貴了,程序員們需要榨干計(jì)算機(jī)硬件的每一滴血和汗才能完成任務(wù)。

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

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

1991年,第一個(gè) Python 版本誕生,編譯器是 C 語(yǔ)言實(shí)現(xiàn)的,Python 語(yǔ)言可以非常方便的調(diào)用 C 語(yǔ)言實(shí)現(xiàn)的庫(kù)(這一點(diǎn)太重要了)。從一問(wèn)世,Python 就是一個(gè)動(dòng)態(tài)語(yǔ)言,面向?qū)ο缶幊痰恼Z(yǔ)言,具備類、函數(shù)、異常處理、列表(list)、詞典(dict)、元組等數(shù)據(jù)類型。

Python 的語(yǔ)法同時(shí)受到了 C 和 ABC 語(yǔ)言的影響,比如采用 def 來(lái)定義函數(shù),比如等號(hào)賦值,比如強(qiáng)制縮進(jìn)。如果你是個(gè) C 或 Java 程序員,習(xí)慣了用大括號(hào)來(lái)劃分程序域 —— 其實(shí)大部分語(yǔ)言都是這么做的 —— 看到 Python 是用縮進(jìn)來(lái)搞定這件事,你馬上會(huì)覺(jué)得「Holy shit」,其實(shí)這種做法來(lái)自 ABC,Guido 的想法是,如果「常識(shí)」上確立的東西,沒(méi)有必要過(guò)度糾結(jié)。當(dāng)然,這種常識(shí)是 Guido 的常識(shí),至于其他人,你們會(huì)習(xí)慣的。

事實(shí)也是如此, Python 吸引了大量的程序員,他們開(kāi)始協(xié)同改進(jìn)這門(mén)語(yǔ)言,Python 開(kāi)始了改變世界的征程。

2000年10月16日 Python 2.0 發(fā)布,這次增加了實(shí)現(xiàn)完整的垃圾回收,并且支持 Unicode 編碼。Guido 在開(kāi)發(fā)的過(guò)程中一直遵循了開(kāi)放的原則,社區(qū)協(xié)作的模式從最初的郵件列表改為開(kāi)源的方式,Python 吸收了大量開(kāi)發(fā)者和編程語(yǔ)言的特點(diǎn),比如,Python 中的正則表達(dá)參考了 Perl,而內(nèi)置函數(shù) lambda,map,reduce,filter 等則參考了 Lisp,無(wú)數(shù)優(yōu)秀的程序員為 Python 添磚加瓦,Python 搞不定的,沒(méi)關(guān)系,我們用 C 實(shí)現(xiàn),于是 Python 有了大量的函數(shù)庫(kù),尤其在數(shù)據(jù)分析和科學(xué)計(jì)算領(lǐng)域。另外,函數(shù)在 Python 中是一等公民,所以 Python 同時(shí)也是一種函數(shù)式編程語(yǔ)言。

Python 穩(wěn)步發(fā)展,成為了一代老牌編程語(yǔ)言。

Python 的應(yīng)用

每個(gè)編程語(yǔ)言都有自己的 Hello World,Python 最為簡(jiǎn)單。如果你有臺(tái) Mac 電腦,Python 的 SDK 是默認(rèn)安裝的。打開(kāi)終端,輸入 Python 進(jìn)入 Python shell 的交互界面,然后鍵入

>>> print “Hello World”

程序?qū)懲炅恕?/p>

Python 這么簡(jiǎn)單,是不是一門(mén)玩具語(yǔ)言呢?當(dāng)然不是。NASA 的火箭發(fā)射儀表盤(pán)系統(tǒng)使用了 Python 的 Tkinter —— 支持實(shí)時(shí)響應(yīng)的 GUI 庫(kù)。NASA 的太陽(yáng)物理學(xué)分詞庫(kù) SunPy 也是基于 Python 寫(xiě)的。YouTube 基于開(kāi)發(fā)速度的考慮,大部分代碼是 Python 實(shí)現(xiàn)的,YouTube 的流量有多大,老百姓不知道,程序員應(yīng)該知道。Google、Dropbox 更是大量采用 Python 語(yǔ)言(Guido 工作過(guò)的兩個(gè)地方)。國(guó)內(nèi)的豆瓣、知乎也是 Python 的重度使用者。

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

AI 時(shí)代的 Python

我來(lái)做一個(gè)不負(fù)責(zé)任的判斷,Python 將成為大數(shù)據(jù)、AI 和機(jī)器學(xué)習(xí)時(shí)代的第一編程語(yǔ)言??梢韵胂筮@樣一個(gè)場(chǎng)景,Python 和 Java、Go、C、C#、Ruby、PHP……坐在圓桌前開(kāi)會(huì),Python 抱著頭后仰在 Herman Miller 工程椅上,慵懶的對(duì)其他編程語(yǔ)言說(shuō):

對(duì)不起,我不是針對(duì)你,我是說(shuō),所有在座的各位,都只能掙第二。

當(dāng)然了,這個(gè)語(yǔ)言范疇是限定在大數(shù)據(jù)、AI 和機(jī)器學(xué)習(xí)領(lǐng)域。但是,如果這個(gè)領(lǐng)域在未來(lái)的應(yīng)用足夠廣泛,那 Python 直接滅掉 Java 當(dāng)大哥也不是不可能的。

Python 性能這么差,對(duì)多核并發(fā)編程支持的也不好,并且長(zhǎng)期分裂成了 Python 2 和 Python 3 兩個(gè)陣營(yíng),給開(kāi)發(fā)者帶來(lái)了諸多不便和麻煩,為什么能后來(lái)者居上呢?

因?yàn)?Python 遵循了現(xiàn)代的木桶原理。

Python 的木桶原理

我在自己的小密圈(目前已經(jīng)漲價(jià)到128元,因?yàn)橘F即是好)提了一個(gè)問(wèn)題:為什么很多數(shù)據(jù)分析和機(jī)器學(xué)習(xí)的框架都會(huì)選用 Python 做主要的開(kāi)發(fā)或首選支持的語(yǔ)言呢?

一位女程序員穎兒的回答最靠譜:免費(fèi),簡(jiǎn)潔,生態(tài)好,庫(kù)豐富,操心少;之前刷機(jī)器學(xué)習(xí)的題,用 C# 寫(xiě)了一坨兒。結(jié)果人家引個(gè) SciPy 庫(kù),三行代碼搞定。

SciPy 是一個(gè)數(shù)值計(jì)算庫(kù),NumPy 是 Python 另一個(gè)開(kāi)源的數(shù)值計(jì)算擴(kuò)展庫(kù),Pandas 是基于 NumPy 的數(shù)據(jù)分析工具,matplotlib 是圖形繪制庫(kù),最近火熱的 Scikit-learn 則是開(kāi)源的機(jī)器學(xué)習(xí)框架。這些庫(kù)對(duì)于 Python 來(lái)說(shuō)就三個(gè)字:「隨便用」。長(zhǎng)此以往,圍繞 Python 語(yǔ)言構(gòu)建出來(lái)的生態(tài)庫(kù)讓其他語(yǔ)言望塵莫及,尤其是在科學(xué)計(jì)算、數(shù)據(jù)分析和機(jī)器學(xué)習(xí)領(lǐng)域。

以前我們說(shuō)「木桶原理」是講一只水桶能裝多少水取決于它最短的那塊木板,所以我們應(yīng)該去思考和補(bǔ)齊自己的短板,才能成事。到了現(xiàn)代,知識(shí)爆炸信息擁堵,沒(méi)人有時(shí)間去補(bǔ)齊短板,能夠讓自己的長(zhǎng)板足夠長(zhǎng)就不錯(cuò)了。短板怎么辦,找別人來(lái)補(bǔ)齊啊。能協(xié)作的組織和人才是最有生命力的。

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

你們不是覺(jué)得 Python 慢么,自然有人給開(kāi)發(fā)出 PyPy、Cython、Jython、Numba 這樣的編譯器工具來(lái)提高 Python 的效率。要進(jìn)行科學(xué)計(jì)算、大數(shù)據(jù)分析,好了,SciPy、Pandas 誕生了,要機(jī)器學(xué)習(xí),scikit-learn、Theano、Pylearn2 等機(jī)器學(xué)習(xí)庫(kù)開(kāi)發(fā)出來(lái)了。Python 調(diào)用這些用 C 或者 Fortran 開(kāi)發(fā)出來(lái)的庫(kù)比原生語(yǔ)言調(diào)用還方便,你說(shuō)大家能不用 Python 么?

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

也許未來(lái)每個(gè)人與機(jī)器溝通的每一句話,就是喚起了一段 Python 代碼呢?

Python 的分裂

Python 2 和 Python 3 曾經(jīng)長(zhǎng)期共存了數(shù)年之久,緣由很復(fù)雜,關(guān)于這個(gè)話題,足夠?qū)懥硪黄恼铝?。目前官方表示?duì) 2 的支持到2020年,但 2 的生態(tài)庫(kù)遠(yuǎn)遠(yuǎn)大于 3,這就讓人很糾結(jié)。

關(guān)于該學(xué)哪個(gè)版本的常見(jiàn)問(wèn)題,我的回復(fù)是,最好都學(xué),語(yǔ)法區(qū)別并不是很大。

 

馬哥學(xué)習(xí)交流群

馬哥教育-Python開(kāi)發(fā)-1群 335068227

馬哥教育-Python開(kāi)發(fā)-2群 608459685

 

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!