Python - 編程語(yǔ)言
Python是一門開(kāi)源免費(fèi)、通用型的腳本編程語(yǔ)言,它上手簡(jiǎn)單,功能強(qiáng)大,堅(jiān)持「極簡(jiǎn)主義」。Python類庫(kù)(模塊)極其豐富,這使得Python幾乎無(wú)所不能,不管是傳統(tǒng)的Web開(kāi)發(fā)、PC軟件開(kāi)發(fā)、Linux運(yùn)維,還是當(dāng)下火熱的機(jī)器學(xué)習(xí)、大數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲(chóng),Python都能勝任。

基本概念
Python(KK英語(yǔ)發(fā)音:/'pa?θɑn/,DJ英語(yǔ)發(fā)音:/?paiθ?n/)是一種面向?qū)ο蟆⒅弊g式計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由Guido?van?Rossum于1989年底發(fā)明。第一個(gè)公開(kāi)發(fā)行版發(fā)行于1991年。Python語(yǔ)法簡(jiǎn)捷而清晰,具有豐富和強(qiáng)大的類庫(kù)。
它常被昵稱為膠水語(yǔ)言,它能夠很輕松的把用其他語(yǔ)言制作的各種模塊(尤其是C/C++)輕松地聯(lián)結(jié)在一起。常見(jiàn)的一種應(yīng)用情形是,使用python快速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對(duì)其中有特別要求的部分,用更合適的語(yǔ)言改寫。比如3D游戲中的圖形渲染模塊,速度要求非常高,就可以用C++重寫。
主要特點(diǎn)
-
易于學(xué)習(xí):Python有相對(duì)較少的關(guān)鍵字,結(jié)構(gòu)簡(jiǎn)單,和一個(gè)明確定義的語(yǔ)法,學(xué)習(xí)起來(lái)更加簡(jiǎn)單。
-
易于閱讀:Python代碼定義的更清晰。
-
易于維護(hù):Python的成功在于它的源代碼是相當(dāng)容易維護(hù)的。
-
一個(gè)廣泛的標(biāo)準(zhǔn)庫(kù):Python的最大的優(yōu)勢(shì)之一是豐富的庫(kù),跨平臺(tái)的,在UNIX,Windows和Macintosh兼容很好。
-
互動(dòng)模式:互動(dòng)模式的支持,您可以從終端輸入執(zhí)行代碼并獲得結(jié)果的語(yǔ)言,互動(dòng)的測(cè)試和調(diào)試代碼片斷。
-
可移植:基于其開(kāi)放源代碼的特性,Python已經(jīng)被移植(也就是使其工作)到許多平臺(tái)。
-
可擴(kuò)展:如果你需要一段運(yùn)行很快的關(guān)鍵代碼,或者是想要編寫一些不愿開(kāi)放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調(diào)用。
-
數(shù)據(jù)庫(kù):Python提供所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。
-
GUI編程:Python支持GUI可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用。
-
可嵌入:可以將Python嵌入到C/C++程序,讓程序的用戶獲得"腳本化"的能力。
優(yōu)點(diǎn)
Python是一種不受局限、跨平臺(tái)的開(kāi)源編程語(yǔ)言,它功能強(qiáng)大且簡(jiǎn)單易學(xué)。因而得到了廣泛應(yīng)用和支持。
ArcGIS9.0社區(qū)中引入了Python。此后,Python被視為可供地理處理用戶選擇的腳本語(yǔ)言并得以不斷發(fā)展。每個(gè)版本都進(jìn)一步增強(qiáng)了Python體驗(yàn),從而為您提供更多的功能以及更豐富、更友好的Python體驗(yàn)。
ESRI已將Python完全納入ArcGIS中,并將其視為可滿足我們用戶社區(qū)需求的語(yǔ)言。下面僅介紹Pytho的部分優(yōu)勢(shì):
1、易于學(xué)習(xí),非常適合初學(xué)者,也特別適合專家使用
2、可伸縮程度高,適于大型項(xiàng)目或小型的一次性程序 - 稱為腳本
3、可移植,跨平臺(tái)
4、可嵌入 - 使ArcGIS可腳本化
5、穩(wěn)定成熟
6、用戶社區(qū)規(guī)模大
Python已延伸到ArcGIS中,成為了一種用于進(jìn)行數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化的語(yǔ)言,因而有助于提高工作效率。
發(fā)展歷程
Python的創(chuàng)始人為Guido?van?Rossum。1989年圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無(wú)趣,決心開(kāi)發(fā)一個(gè)新的腳本解釋程序,做為ABC語(yǔ)言的一種繼承。之所以選中Python(大蟒蛇的意思)作為程序的名字,是因?yàn)樗且粋€(gè)叫Monty?Python的喜劇團(tuán)體的愛(ài)好者。
ABC是由Guido參加設(shè)計(jì)的一種教學(xué)語(yǔ)言。就Guido本人看來(lái),ABC這種語(yǔ)言非常優(yōu)美和強(qiáng)大,是專門為非專業(yè)程序員設(shè)計(jì)的。但是ABC語(yǔ)言并沒(méi)有成功,究其原因,Guido認(rèn)為是非開(kāi)放造成的。Guido決心在Python中避免這一錯(cuò)誤。同時(shí),他還想實(shí)現(xiàn)在ABC中閃現(xiàn)過(guò)但未曾實(shí)現(xiàn)的東西。
就這樣,Python在Guido手中誕生了。實(shí)際上,第一個(gè)實(shí)現(xiàn)是在Mac機(jī)上。可以說(shuō),Python是從ABC發(fā)展起來(lái),主要受到了Modula-3(另一種相當(dāng)優(yōu)美且強(qiáng)大的語(yǔ)言,為小型團(tuán)體所設(shè)計(jì)的)的影響。并且結(jié)合了Unix?shell和C的習(xí)慣。
其他資料
風(fēng)格
Python在設(shè)計(jì)上堅(jiān)持了清晰劃一的風(fēng)格,這使得Python成為一門易讀、易維護(hù),并且被大量用戶所歡迎的、用途廣泛的語(yǔ)言。
設(shè)計(jì)者開(kāi)發(fā)時(shí)總的指導(dǎo)思想是,對(duì)于一個(gè)特定的問(wèn)題,只要有一種最好的方法來(lái)解決就好了。這在由Tim?Peters寫的python格言(稱為The?Zen?of?Python)里面表述為:There?should?be?one–?and?preferably?only?one?–obvious?way?to?do?it.?這正好和Perl語(yǔ)言(另一種功能類似的高級(jí)動(dòng)態(tài)語(yǔ)言)的中心思想TMTOWTDI(There's?More?Than?One?Way?To?Do?It)完全相反。
Python的作者有意的設(shè)計(jì)限制性很強(qiáng)的語(yǔ)法,使得不好的編程習(xí)慣(例如if語(yǔ)句的下一行不向右縮進(jìn))都不能通過(guò)編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。
一個(gè)和其他大多數(shù)語(yǔ)言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來(lái)決定的(而C語(yǔ)言是用一對(duì)花括號(hào){}來(lái)明確的定出模塊的邊界的,與字符的位置毫無(wú)關(guān)系)。這一點(diǎn)曾經(jīng)引起過(guò)爭(zhēng)議。因?yàn)樽詮腃這類的語(yǔ)言誕生后,語(yǔ)言的語(yǔ)法含義與字符的排列方式分離開(kāi)來(lái),曾經(jīng)被認(rèn)為是一種程序語(yǔ)言的進(jìn)步。不過(guò)不可否認(rèn)的是,通過(guò)強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。
設(shè)計(jì)定位
Python的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡(jiǎn)單”。因此,Perl語(yǔ)言中“總是有多種方法來(lái)做同一件事”的理念在Python開(kāi)發(fā)者中通常是難以忍受的。Python開(kāi)發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來(lái)做一件事”。在設(shè)計(jì)Python語(yǔ)言時(shí),如果面臨多種選擇,Python開(kāi)發(fā)者一般會(huì)拒絕花俏的語(yǔ)法,而選擇明確的沒(méi)有或者很少有歧義的語(yǔ)法。由于這種設(shè)計(jì)觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開(kāi)發(fā)。這些準(zhǔn)則被稱為Python格言。在Python解釋器內(nèi)運(yùn)行import?this可以獲得完整的列表。
Python開(kāi)發(fā)人員盡量避開(kāi)不成熟或者不重要的優(yōu)化。一些針對(duì)非重要部位的加快運(yùn)行速度的補(bǔ)丁通常不會(huì)被合并到Python內(nèi)。所以很多人認(rèn)為Python很慢。不過(guò),根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓?。在某些?duì)運(yùn)行速度要求很高的情況,Python設(shè)計(jì)師傾向于使用JIT技術(shù),或者用使用C/C++語(yǔ)言改寫這部分程序??捎玫腏IT技術(shù)是PyPy。
Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語(yǔ)言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù) - functools,?itertools提供了Haskell和Standard?ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。
雖然Python可能被粗略地分類為“腳本語(yǔ)言”(script?language),但實(shí)際上一些大規(guī)模軟件開(kāi)發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級(jí)動(dòng)態(tài)編程語(yǔ)言,原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語(yǔ)言,如shellscript、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語(yǔ)言,并不能與Python相提并論。
Python本身被設(shè)計(jì)為可擴(kuò)充的。并非所有的特性和功能都集成到語(yǔ)言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語(yǔ)言、C++、Cython來(lái)編寫擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語(yǔ)言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語(yǔ)言”(glue?language)使用。使用Python將其他語(yǔ)言編寫的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google?Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊?!禤ython技術(shù)手冊(cè)》的作者馬特利(Alex?Martelli)說(shuō):“這很難講,不過(guò),2004年,Python已在Google內(nèi)部使用,Google召募許多Python高手,但在這之前就已決定使用Python,他們的目的是?Python?where?we?can,?C++?where?we?must,在操控硬件的場(chǎng)合使用C++,在快速開(kāi)發(fā)時(shí)候使用Python?!?/p>
執(zhí)行
Python在執(zhí)行時(shí),首先會(huì)將.py文件中的源代碼編譯成Python的byte?code(字節(jié)碼),然后再由Python?Virtual?Machine(Python虛擬機(jī))來(lái)執(zhí)行這些編譯好的byte?code。這種機(jī)制的基本思想跟Java,.NET是一致的。然而,Python?Virtual?Machine與Java或.NET的Virtual?Machine不同的是,Python的Virtual?Machine是一種更高級(jí)的Virtual?Machine。
這里的高級(jí)并不是通常意義上的高級(jí),不是說(shuō)Python的Virtual?Machine比Java或.NET的功能更強(qiáng)大,而是說(shuō)和Java或.NET相比,Python的Virtual?Machine距離真實(shí)機(jī)器的距離更遠(yuǎn)?;蛘呖梢赃@么說(shuō),Python的Virtual?Machine是一種抽象層次更高的Virtual?Machine。
基于C的Python編譯出的字節(jié)碼文件,通常是pyc格式。
升級(jí)
Python的3.0版本,在開(kāi)發(fā)階段被稱為Python?3000,或簡(jiǎn)稱Py3k。相對(duì)于Python的早期版本,這是一個(gè)較大的升級(jí)。為了不帶入過(guò)多的累贅,Python?3.0在設(shè)計(jì)的時(shí)候就沒(méi)有考慮向下兼容。許多針對(duì)早期Python版本設(shè)計(jì)的程序都無(wú)法在Python?3.0上正常運(yùn)行。為了照顧現(xiàn)有程序,Python?2.6作為一個(gè)過(guò)渡版本,基本使用了Python?2.x的語(yǔ)法和庫(kù),同時(shí)考慮了向Python?3.0的遷移。基于早期Python版本而能正常運(yùn)行于Python 2.6并無(wú)警告的程序可以通過(guò)一個(gè)2to3的轉(zhuǎn)換工具無(wú)縫遷移到Python 3.0。
Python 3.0的變化主要在以下幾個(gè)方面:
部分函數(shù)和語(yǔ)句的改變:最引人注意的改變是print語(yǔ)句沒(méi)有了,取而代之的是print函數(shù)。
字符串和字節(jié):類似Java,str類表示一個(gè)Unicode字符串,代替了早期版本的unicode類。而一堆字節(jié)則用類似b“abc”的語(yǔ)法創(chuàng)建,用bytes類表示。
標(biāo)準(zhǔn)庫(kù)
Python擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)庫(kù)。Python語(yǔ)言的核心只包含數(shù)字、字符串、列表、字典、文件等常見(jiàn)類型和函數(shù),而由Python標(biāo)準(zhǔn)庫(kù)提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)、XML處理等額外的功能。Python標(biāo)準(zhǔn)庫(kù)命名接口清晰、文檔良好,很容易學(xué)習(xí)和使用。
Python社區(qū)提供了大量的第三方模塊,使用方式與標(biāo)準(zhǔn)庫(kù)類似。它們的功能無(wú)所不包,覆蓋科學(xué)計(jì)算、Web開(kāi)發(fā)、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)多個(gè)領(lǐng)域,并且大多成熟而穩(wěn)定。第三方模塊可以使用Python或者C語(yǔ)言編寫。SWIG,SIP常用于將C語(yǔ)言編寫的程序庫(kù)轉(zhuǎn)化為Python模塊。Boost?C++?Libraries包含了一組庫(kù),Boost.Python,使得以Python或C++編寫的程序能互相調(diào)用。借助于擁有基于標(biāo)準(zhǔn)庫(kù)的大量工具、能夠使用低級(jí)語(yǔ)言如C和可以作為其他庫(kù)接口的C++,Python已成為一種強(qiáng)大的應(yīng)用于其他語(yǔ)言與工具之間的膠水語(yǔ)言。
Python標(biāo)準(zhǔn)庫(kù)的主要功能有:
文本處理,包含文本格式化、正則表達(dá)式匹配、文本差異計(jì)算與合并、Unicode支持,二進(jìn)制數(shù)據(jù)處理等功能;
文件處理,包含文件操作、創(chuàng)建臨時(shí)文件、文件壓縮與歸檔、操作配置文件等功能;
操作系統(tǒng)功能,包含線程與進(jìn)程支持、IO復(fù)用、日期與時(shí)間處理、調(diào)用系統(tǒng)函數(shù)、寫日記 - logging等功能;
網(wǎng)絡(luò)通信,包含網(wǎng)絡(luò)套接字,SSL加密通信、異步網(wǎng)絡(luò)通信等功能;
網(wǎng)絡(luò)協(xié)議,支持HTTP,F(xiàn)TP,SMTP,POP,IMAP,NNTP,XMLRPC等多種網(wǎng)絡(luò)協(xié)議,并提供了編寫網(wǎng)絡(luò)服務(wù)器的框架;
W3C格式支持,包含HTML,SGML,XML的處理;
其它功能,包括國(guó)際化支持、數(shù)學(xué)運(yùn)算、HASH、Tkinter等。
開(kāi)發(fā)環(huán)境
●IDLE:Python內(nèi)置IDE - 隨python安裝包提供
●Komodo和Komodo?Edit:后者是前者的免費(fèi)精簡(jiǎn)版
●PythonWin:ActivePython或pywin32均提供該IDE,僅適用于Windows
●SPE(Stani's?Python?Editor):功能較多的自由軟件,基于wxPython
●Ulipad:功能較全的自由軟件,基于wxPython;作者是中國(guó)Python高手limodou
●WingIDE:可能是功能最全的IDE,但不是自由軟件 - 教育用戶和開(kāi)源用戶可以申請(qǐng)免費(fèi)key
●Eric:基于PyQt的自由軟件,功能強(qiáng)大。全名是:The?Eric?Python?IDE
●PyScripter:使用Delphi開(kāi)發(fā)的輕量級(jí)的開(kāi)源Python?IDE,支持Python2.6和3.0。
●PyPE:一個(gè)開(kāi)源的跨平臺(tái)的PythonIDE。
●bpython:類Unix操作系統(tǒng)下使用curses庫(kù)開(kāi)發(fā)的輕量級(jí)的Python解釋器。語(yǔ)法提示功能。
IDE軟件
●eclipse?+?pydev插件:方便調(diào)試程序
●emacs:自帶python支持,自動(dòng)補(bǔ)全、refactor等功能需要插件支持
●Vim:最新7.3版編譯時(shí)可以加入python支持,提供python代碼自動(dòng)提示支持
●Visual?Studio?2003?+?VisualPython:僅適用Windows,已停止維護(hù),功能較差
●Visual?Studio?2010?+?Python?Tools?for?Visual?Studio
●TextMate
●Netbeans?IDE
另外,諸如EditPlus、UltraEdit、PSPad等通用的程序員文本編輯器軟件也能對(duì)Python代碼編輯提供一定的支持,比如代碼自動(dòng)著色、注釋快捷鍵等,但是否夠得上集成開(kāi)發(fā)環(huán)境的水平,尚有待評(píng)估。
問(wèn)題
1、運(yùn)行速度慢
2、國(guó)內(nèi)市場(chǎng)較小
3、中文資料匱乏(好的python中文資料屈指可數(shù))。托社區(qū)的福,有幾本優(yōu)秀的教材已經(jīng)被翻譯了,但入門級(jí)教材多,高級(jí)內(nèi)容還是只能看英語(yǔ)版
4、構(gòu)架選擇太多,不過(guò)這也從另一個(gè)側(cè)面說(shuō)明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多
學(xué)習(xí)網(wǎng)站
Python官方文檔
PythonTab中文網(wǎng)
Python愛(ài)好者論壇
Pythoner在線互動(dòng)交流平臺(tái)
python菜鳥(niǎo)教程
python基礎(chǔ)教程
