人生苦短籽孙,我用Python
????????Python的創(chuàng)始人為荷蘭人吉多·范羅蘇姆(Guido van Rossum)恩闻。1989年圣誕節(jié)期間扁达,在阿姆斯特丹窄潭,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序腋舌,作為ABC語言的一種繼承渣聚。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是取自英國20世紀(jì)70年代首播的電視喜劇《蒙提·派森的飛行馬戲團(tuán)》(Monty Python's Flying Circus)蔬蕊。
????????Python已經(jīng)成為最受歡迎的程序設(shè)計語言之一结澄。自從2004年以后,python的使用率呈線性增長岸夯。Python 2于2000年10月16日發(fā)布麻献,穩(wěn)定版本是Python 2.7。Python 3于2008年12月3日發(fā)布猜扮,不完全兼容Python 2赎瑰。2011年1月,它被TIOBE編程語言排行榜評為2010年度語言破镰。
優(yōu)點(diǎn)
簡單:Python是一種代表簡單主義思想的語言餐曼。閱讀一個良好的Python程序就感覺像是在讀英語一樣。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身鲜漩。
易學(xué):Python極其容易上手源譬,因為Python有極其簡單的說明文檔?。
易讀孕似、易維護(hù):風(fēng)格清晰劃一踩娘、強(qiáng)制縮進(jìn)
用途廣泛:Web開發(fā)、網(wǎng)絡(luò)爬蟲喉祭、人工智能养渴、數(shù)據(jù)分析、自動化運(yùn)維等泛烙。
速度快:Python 的底層是用 C 語言寫的理卑,很多標(biāo)準(zhǔn)庫和第三方庫也都是用 C 寫的,運(yùn)行速度非潮伟保快藐唠。
免費(fèi)帆疟、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發(fā)布這個軟件的拷貝宇立、閱讀它的源代碼踪宠、對它做改動、把它的一部分用于新的自由軟件中妈嘹。FLOSS是基于一個團(tuán)體分享知識的概念柳琢。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。
可移植性:由于它的開源本質(zhì)润脸,Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)。這些平臺包括Linux津函、Windows肖粮、FreeBSD、Macintosh尔苦、Solaris涩馆、OS/2、Amiga允坚、AROS魂那、AS/400、BeOS稠项、OS/390涯雅、z/OS、Palm OS展运、QNX活逆、VMS、Psion拗胜、Acom RISC OS蔗候、VxWorks、PlayStation埂软、Sharp Zaurus锈遥、Windows CE、PocketPC勘畔、Symbian以及Google基于linux開發(fā)的android平臺所灸。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個你的計算機(jī)使用的語言(二進(jìn)制代碼,即0和1)炫七。這個過程通過編譯器和不同的標(biāo)記爬立、選項完成。
運(yùn)行程序的時候诉字,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行懦尝。而Python語言寫的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行 程序壤圃。
在計算機(jī)內(nèi)部陵霉,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機(jī)使用的機(jī)器語言并運(yùn)行伍绳。這使得使用Python更加簡單踊挠。也使得Python程序更加易于移植。
面向?qū)ο?/b>:Python既支持面向過程的編程也支持面向?qū)ο蟮木幊坛迳薄T凇懊嫦蜻^程”的語言中效床,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο?/a>”的語言中权谁,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的剩檀。
Python是完全面向?qū)ο?/a>的語言。函數(shù)旺芽、模塊沪猴、數(shù)字、字符串都是對象采章。并且完全支持繼承运嗜、重載、派生悯舟、多繼承担租,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動態(tài)類型抵怎。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言奋救,Python對函數(shù)式設(shè)計只提供了有限的支持。有兩個標(biāo)準(zhǔn)庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具反惕。
可擴(kuò)展性菠镇、可擴(kuò)充性:如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫承璃,然后在Python程序中使用它們利耍。
Python本身被設(shè)計為可擴(kuò)充的。并非所有的特性和功能都集成到語言核心盔粹。Python提供了豐富的API和工具隘梨,以便程序員能夠輕松地使用C語言、C++舷嗡、Cython來編寫擴(kuò)充模塊轴猎。Python編譯器本身也可以被集成到其它需要腳本語言的程序內(nèi)。因此进萄,很多人還把Python作為一種“膠水語言”(glue language)使用捻脖。使用Python將其他語言編寫的程序進(jìn)行集成和封裝锐峭。在Google內(nèi)部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分可婶,然后用Python或Java/Go調(diào)用相應(yīng)的模塊沿癞。《Python技術(shù)手冊》的作者馬特利(Alex Martelli)說:“這很難講矛渴,不過椎扬,2004 年,Python 已在Google?內(nèi)部使用具温,Google 召募許多 Python 高手蚕涤,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must铣猩,在操控硬件的場合使用C++揖铜,在快速開發(fā)時候使用 Python〈锩螅”
可嵌入性:可以把Python嵌入C/C++程序蛮位,從而向程序用戶提供腳本功能。
豐富的庫:Python標(biāo)準(zhǔn)庫確實(shí)很龐大鳞绕。它可以幫助處理各種工作失仁,包括正則表達(dá)式、文檔生成们何、單元測試萄焦、線程、數(shù)據(jù)庫冤竹、網(wǎng)頁瀏覽器拂封、CGI、FTP鹦蠕、電子郵件冒签、XML、XML-RPC钟病、HTML萧恕、WAV文件、密碼系統(tǒng)肠阱、GUI(圖形用戶界面)票唆、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念屹徘。除了標(biāo)準(zhǔn)庫以外走趋,還有許多其他高質(zhì)量的庫,如wxPython噪伊、Twisted和Python圖像庫等等簿煌。
規(guī)范的代碼:Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好可讀性氮唯。而Python語言寫的程序不需要編譯成二進(jìn)制代碼。Python的作者設(shè)計限制性很強(qiáng)的語法姨伟,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進(jìn))都不能通過編譯惩琉。其中很重要的一項就是Python的縮進(jìn)規(guī)則。一個和其他大多數(shù)語言(如C)的區(qū)別就是授滓,一個模塊的界限琳水,完全是由每行的首字符在這一行的位置來決定(而C語言是用一對花括號{}來明確的定出模塊的邊界肆糕,與字符的位置毫無關(guān)系)般堆。通過強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方)诚啃,Python確實(shí)使得程序更加清晰和美觀淮摔。
高級動態(tài)編程:雖然Python可能被粗略地分類為“腳本語言”(script language),但實(shí)際上一些大規(guī)模軟件開發(fā)計劃例如Zope始赎、Mnet及BitTorrent和橙,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態(tài)編程語言造垛,原因是“腳本語言”泛指僅作簡單程序設(shè)計任務(wù)的語言魔招,如shellscript、VBScript等只能處理簡單任務(wù)的編程語言五辽,并不能與Python相提并論办斑。
做科學(xué)計算優(yōu)點(diǎn)多:說起科學(xué)計算,首先會被提到的可能是MATLAB杆逗。除了MATLAB的一些專業(yè)性很強(qiáng)的工具箱還無法被替代之外乡翅,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫。和MATLAB相比罪郊,用Python做科學(xué)計算有如下優(yōu)點(diǎn):
● 首先蠕蚜,MATLAB是一款商用軟件,并且價格不菲悔橄。而Python完全免費(fèi)靶累,眾多開源的科學(xué)計算庫都提供了Python的調(diào)用接口。用戶可以在任何計算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫癣疟。
● 其次尺铣,與MATLAB相比,Python是一門更易學(xué)争舞、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計語言凛忿。它能讓用戶編寫出更易讀、易維護(hù)的代碼竞川。
● 最后店溢,MATLAB主要專注于工程和科學(xué)計算叁熔。然而即使在計算領(lǐng)域,也經(jīng)常會遇到文件管理床牧、界面設(shè)計荣回、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫戈咳,可以輕易完成各種高級任務(wù)心软,開發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。
缺點(diǎn)
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行著蛙,如import sys;for i in sys.path:print i删铃。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程序踏堡,不需要如Python一樣猎唁,必須將程序?qū)懭胍粋€.py文件。
給初學(xué)者帶來困惑:獨(dú)特的語法顷蟆,這也許不應(yīng)該被稱為局限诫隅,但是它用縮進(jìn)來區(qū)分語句關(guān)系的方式還是給很多初學(xué)者帶來了困惑。即便是很有經(jīng)驗的Python程序員帐偎,也可能陷入陷阱當(dāng)中逐纬。
運(yùn)行速度慢:這里是指與C和C++相比。Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化削樊。一些針對非重要部位的加快運(yùn)行速度的補(bǔ)丁通常不會被合并到Python內(nèi)豁生。所以很多人認(rèn)為Python很慢。不過嫉父,根據(jù)二八定律沛硅,大多數(shù)程序?qū)λ俣纫蟛桓摺T谀承\(yùn)行速度要求很高的情況绕辖,Python設(shè)計師傾向于使用JIT技術(shù)摇肌,或者用使用C/C++語言改寫這部分程序∫羌剩可用的JIT技術(shù)是PyPy围小。