人生苦短,我用Python
相信混跡IT界的很多朋友都知道,Python是近年來最火的一個熱點之一。
起源
Guido von Rossum
Python的作者,Guido von Rossum,荷蘭人。1982年,Guido從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計算機(jī)碩士學(xué)位。然而,盡管他算得上是一位數(shù)學(xué)家,但他更加享受計算機(jī)帶來的樂趣。
Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面調(diào)用計算機(jī)的功能接口,又可以像shell那樣,可以輕松的編程。ABC語言讓Guido看到希望。ABC是由荷蘭的數(shù)學(xué)和計算機(jī)研究所開發(fā)的。Guido在該研究所工作,并參與到ABC語言的開發(fā)。ABC語言以教學(xué)為目的。與當(dāng)時的大部分語言不同,ABC語言的目標(biāo)是“讓用戶感覺更好”。ABC語言希望讓語言變得容易閱讀,容易使用,容易記憶,容易學(xué)習(xí),并以此來激發(fā)人們學(xué)習(xí)編程的興趣
1991年,第一個Python編譯器誕生。它是用C語言實現(xiàn)的,并能夠調(diào)用C語言的庫文件。從一出生,Python已經(jīng)具有了:類,函數(shù),異常處理,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)。
發(fā)展歷程
Python語法很多來自C,但又受到ABC語言的強(qiáng)烈影響。來自ABC語言的一些規(guī)定直到今天還富有爭議,比如強(qiáng)制縮進(jìn)。 但這些語法規(guī)定讓Python容易讀。另一方面,Python聰明地選擇服從一些慣例,特別是C語言的慣例,比如回歸等號賦值。Python是一種腳本語言,它的語法表達(dá)優(yōu)美易讀。它具有很多優(yōu)秀的腳本語言的特點:解釋的,面向?qū)ο蟮?,?nèi)建的高級數(shù)據(jù)結(jié)構(gòu),支持模塊和包,支持多種平臺,可擴(kuò)展。
Python 1.0 - 1994年一月 增加了 lambda, map, filter and reduce。
Python 2.0 - 2000年十月,加入了內(nèi)存回收機(jī)制,構(gòu)成了現(xiàn)在Python語言框架的基礎(chǔ)。
Python 2.4 - 2004年十一月, 同年目前最流行的WEB框架Django 誕生。
Python 2.5 - 2006年九月
Python 2.6 - 2008年十月
Python 2.7 - 2010年七月
2014年十一月,同時官方宣布Python 2.7將在2020年之前得到支持,并重申將不會發(fā)布2.8版本,因為預(yù)計用戶將盡快轉(zhuǎn)向Python 3.4+。2.7版本的誕生不同于以往2.x版本的垂直換代邏輯,它是2.x版本和3.x版本之間過渡的一個橋梁,以便最大程度上繼承3.x版本的新特性,同時盡量保持對2.x的兼容性。2.x版本將逐漸壽終正寢,最終被銘刻在開發(fā)語言的豐碑上。
Python 3.0 - 2008年十二月
Python 3.1 - 2009年六月
Python 3.2 - 2011年二月
Python 3.3 - 2012年九月
Python 3.4 - 2014年三月
Python 3.5 - 2015年九月
優(yōu)點
Python在設(shè)計上堅持了清晰劃一的風(fēng)格,這使得Python成為一門易讀、易維護(hù),并且被大量用戶所歡迎的、用途廣泛的語言。
Guido有意的設(shè)計限制性很強(qiáng)的語法,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進(jìn))都不能通過編譯。其中很重要的一項就是Python的縮進(jìn)規(guī)則。
Python作為一種高級語言,具有豐富的第三方庫,官方庫中也有相應(yīng)的功能模塊支持,覆蓋了網(wǎng)絡(luò)、文件、GUI、數(shù)據(jù)庫、文本等大量內(nèi)容。因此開發(fā)者無需事必躬親,遇到主流的功能需求時可以直接調(diào)用,在基礎(chǔ)庫的基礎(chǔ)上施展拳腳,可以節(jié)省你很多功力和時間成本,大大降低開發(fā)周期。在編程時無需關(guān)注底層細(xì)節(jié)(如內(nèi)存管理等)。
Python完全免費,眾多開源的科學(xué)計算庫都提供了Python的調(diào)用接口。用戶可以在任何計算機(jī)上免費安裝Python及其絕大多數(shù)擴(kuò)展庫。
Python可以以命令行方式運行,也可以交互式方式運行,還具有圖形集成環(huán)境,這樣開發(fā)Python就相當(dāng)方便。
缺點
代碼運行速度慢。Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑于使用Python的主要原因。
GIL 鎖限制并發(fā)。首先需要明確的一點是GIL并不是Python的特性,它是在實現(xiàn)Python解析器(CPython)時所引入的一個概念。Python最初的設(shè)計理念在于,為了解決多線程之間數(shù)據(jù)完整性和狀態(tài)同步的問題,設(shè)計為在任意時刻只有一個線程在解釋器中運行。那么為什么不拋棄GIL呢?許多人也許不知道,在1999年,針對Python 1.5,一個經(jīng)常被提到但卻不怎么理解的“free threading”補(bǔ)丁已經(jīng)嘗試實現(xiàn)了這個想法,該補(bǔ)丁來自Greg Stein。在這個補(bǔ)丁中,GIL被完全的移除,且用細(xì)粒度的鎖來代替。然而,GIL的移除給單線程程序的執(zhí)行速度帶來了一定的代價。
代碼不能加密。如果你的項目要求源代碼必須是加密的,那你一開始就不應(yīng)該用Python來去實現(xiàn)。
另外在 Python 中,Python 2.x與 Python 3.x 不兼容。因為 Python 沒有向后兼容,給所有的 Python 工程師帶來了無數(shù)的煩惱。