基本概念
Python(KK英語發音:/'paɪθɑn/,DJ英語發音:/ˈpaiθən/)是一種面向對象、直譯式電腦程式設計語言,由GuidovanRossum於1989年底發明。第一個公開發行版發行於1991年。Python語法簡捷而清晰,具有豐富和強大的類庫。它常被暱稱為膠水語言,它能夠很輕鬆的把用其他語言製作的各種模組(尤其是C/C++)輕鬆地聯結在一起。常見的一種套用情形是,使用python快速生成程式的原型(有時甚至是程式的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫。比如3D遊戲中的圖形渲染模組,速度要求非常高,就可以用C++重寫。
主要特點
簡單Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。易學Python極其容易上手,因為Python有極其簡單的語法。
免費、開源Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發布這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
高層語言用Python語言編寫程式的時候無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。
可移植性由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工作在不同平台上)。這些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、PalmOS、QNX、VMS、Psion、AcomRISCOS、VxWorks、PlayStation、SharpZaurus、WindowsCE、PocketPC、Symbian以及Google基於linux開發的android平台。
解釋性一個用編譯性語言比如C或C++寫的程式可以從源檔案(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。
運行程式的時候,連線/轉載器軟體把你的程式從硬碟複製到記憶體中並且運行。而Python語言寫的程式不需要編譯成二進制代碼。你可以直接從原始碼運行程式。
在計算機內部,Python解釋器把原始碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程式更加易於移植。
面向對象Python既支持面向過程的編程也支持面向對象的編程。在“面向過程”的語言中,程式是由過程或僅僅是可重用代碼的函式構建起來的。在“面向對象”的語言中,程式是由數據和功能組合而成的對象構建起來的。
可擴展性如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以部分程式用C或C++編寫,然後在Python程式中使用它們。
可嵌入性可以把Python嵌入C/C++程式,從而向程式用戶提供腳本功能。
豐富的庫Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表達式、文檔生成、單元測試、執行緒、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV檔案、密碼系統、GUI(圖形用戶界面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。
規範的代碼Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程式不需要編譯成二進制代碼。
優點
Python是一種不受局限、跨平台的開源程式語言,它功能強大且簡單易學。因而得到了廣泛套用和支持。ArcGIS9.0社區中引入了Python。此後,Python被視為可供地理處理用戶選擇的腳本語言並得以不斷發展。每個版本都進一步增強了Python體驗,從而為您提供更多的功能以及更豐富、更友好的Python體驗。
ESRI已將Python完全納入ArcGIS中,並將其視為可滿足我們用戶社區需求的語言。下面僅介紹Pytho的部分優勢:
易於學習,非常適合初學者,也特別適合專家使用
可伸縮程度高,適於大型項目或小型的一次性程式(稱為腳本)
可移植,跨平台
可嵌入(使ArcGIS可腳本化)
穩定成熟
用戶社區規模大
Python已延伸到ArcGIS中,成為了一種用於進行數據分析、數據轉換、數據管理和地圖自動化的語言,因而有助於提高工作效率。
發展歷程
Python的創始人為GuidovanRossum。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程式,做為ABC語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為程式的名字,是因為他是一個叫MontyPython的喜劇團體的愛好者。ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC這種語言非常優美和強大,是專門為非專業程式設計師設計的。但是ABC語言並沒有成功,究其原因,Guido認為是非開放造成的。Guido決心在Python中避免這一錯誤。同時,他還想實現在ABC中閃現過但未曾實現的東西。
就這樣,Python在Guido手中誕生了。實際上,第一個實現是在Mac機上。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。並且結合了Unixshell和C的習慣。
其他資料
風格
Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,並且被大量用戶所歡迎的、用途廣泛的語言。
設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由TimPeters寫的python格言(稱為TheZenofPython)裡面表述為:Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There'sMoreThanOneWayToDoIt)完全相反。
Python的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。
一個和其他大多數語言(如C)的區別就是,一個模組的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括弧{}來明確的定出模組的邊界的,與字元的位置毫無關係)。這一點曾經引起過爭議。因為自從C這類的語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程式語言的進步。不過不可否認的是,通過強制程式設計師們縮進(包括if,for和函式定義等所有需要使用模組的地方),Python確實使得程式更加清晰和美觀。
設計定位
Python的設計哲學是“優雅”、“明確”、“簡單”。因此,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是“用一種方法,最好是只有一種方法來做一件事”。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python原始碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些準則被稱為Python格言。在Python解釋器內運行importthis可以獲得完整的列表。
Python開發人員儘量避開不成熟或者不重要的最佳化。一些針對非重要部位的加快運行速度的補丁通常不會被合併到Python內。所以很多人認為Python很慢。不過,根據二八定律,大多數程式對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程式。可用的JIT技術是PyPy。
Python是完全面向對象的語言。函式、模組、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強原始碼的復用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函式式程式語言,Python對函式式設計只提供了有限的支持。有兩個標準庫(functools,itertools)提供了Haskell和StandardML中久經考驗的函式式程式設計工具。
雖然Python可能被粗略地分類為“腳本語言”(scriptlanguage),但實際上一些大規模軟體開發計畫例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級動態程式語言,原因是“腳本語言”泛指僅作簡單程式設計任務的語言,如shellscript、VBScript等只能處理簡單任務的程式語言,並不能與Python相提並論。
Python本身被設計為可擴充的。並非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程式設計師能夠輕鬆地使用C語言、C++、Cython來編寫擴充模組。Python編譯器本身也可以被集成到其它需要腳本語言的程式內。因此,很多人還把Python作為一種“膠水語言”(gluelanguage)使用。使用Python將其他語言編寫的程式進行集成和封裝。在Google內部的很多項目,例如GoogleEngine使用C++編寫性能要求極高的部分,然後用Python或Java/Go調用相應的模組。《Python技術手冊》的作者馬特利(AlexMartelli)說:“這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這之前就已決定使用Python,他們的目的是Pythonwherewecan,C++wherewemust,在操控硬體的場合使用C++,在快速開發時候使用Python。”
執行
Python在執行時,首先會將.py檔案中的原始碼編譯成Python的bytecode(位元組碼),然後再由PythonVirtualMachine(Python虛擬機)來執行這些編譯好的bytecode。這種機制的基本思想跟Java,.NET是一致的。然而,PythonVirtualMachine與Java或.NET的VirtualMachine不同的是,Python的VirtualMachine是一種更高級的VirtualMachine。
這裡的高級並不是通常意義上的高級,不是說Python的VirtualMachine比Java或.NET的功能更強大,而是說和Java或.NET相比,Python的VirtualMachine距離真實機器的距離更遠。或者可以這么說,Python的VirtualMachine是一種抽象層次更高的VirtualMachine。
基於C的Python編譯出的位元組碼檔案,通常是pyc格式。
升級
Python的3.0版本,在開發階段被稱為Python3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。為了不帶入過多的累贅,Python3.0在設計的時候就沒有考慮向下兼容。許多針對早期Python版本設計的程式都無法在Python3.0上正常運行。為了照顧現有程式,Python2.6作為一個過渡版本,基本使用了Python2.x的語法和庫,同時考慮了向Python3.0的遷移。基於早期Python版本而能正常運行於Python2.6並無警告的程式可以通過一個2to3的轉換工具無縫遷移到Python3.0。
Python3.0的變化主要在以下幾個方面:
部分函式和語句的改變:最引人注意的改變是print語句沒有了,取而代之的是print函式。
字元串和位元組:類似Java,str類表示一個Unicode字元串,代替了早期版本的unicode類。而一堆位元組則用類似b“abc”的語法創建,用bytes類表示。
標準庫
Python擁有一個強大的標準庫。Python語言的核心只包含數字、字元串、列表、字典、檔案等常見類型和函式,而由Python標準庫提供了系統管理、網路通信、文本處理、資料庫接口、圖形系統、XML處理等額外的功能。Python標準庫命名接口清晰、文檔良好,很容易學習和使用。
Python社區提供了大量的第三方模組,使用方式與標準庫類似。它們的功能無所不包,覆蓋科學計算、Web開發、資料庫接口、圖形系統多個領域,並且大多成熟而穩定。第三方模組可以使用Python或者C語言編寫。SWIG,SIP常用於將C語言編寫的程式庫轉化為Python模組。BoostC++Libraries包含了一組庫,Boost.Python,使得以Python或C++編寫的程式能互相調用。藉助於擁有基於標準庫的大量工具、能夠使用低級語言如C和可以作為其他庫接口的C++,Python已成為一種強大的套用於其他語言與工具之間的膠水語言。
Python標準庫的主要功能有:
文本處理,包含文本格式化、正則表達式匹配、文本差異計算與合併、Unicode支持,二進制數據處理等功能;
檔案處理,包含檔案操作、創建臨時檔案、檔案壓縮與歸檔、操作配置檔案等功能;
作業系統功能,包含執行緒與進程支持、IO復用、日期與時間處理、調用系統函式、寫日記(logging)等功能;
網路通信,包含網路套接字,SSL加密通信、異步網路通信等功能;
網路協定,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多種網路協定,並提供了編寫網路伺服器的框架;
W3C格式支持,包含HTML,SGML,XML的處理;
其它功能,包括國際化支持、數學運算、HASH、Tkinter等。
開發環境
●IDLE:Python內置IDE(隨python安裝包提供)
●Komodo和KomodoEdit:後者是前者的免費精簡版
●PythonWin:ActivePython或pywin32均提供該IDE,僅適用於Windows
●SPE(Stani'sPythonEditor):功能較多的自由軟體,基於wxPython
●Ulipad:功能較全的自由軟體,基於wxPython;作者是中國Python高手limodou
●WingIDE:可能是功能最全的IDE,但不是自由軟體(教育用戶和開源用戶可以申請免費key)
●Eric:基於PyQt的自由軟體,功能強大。全名是:TheEricPythonIDE
●PyScripter:使用Delphi開發的輕量級的開源PythonIDE,支持Python2.6和3.0。
●PyPE:一個開源的跨平台的PythonIDE。
●bpython:類Unix作業系統下使用curses庫開發的輕量級的Python解釋器。語法提示功能。
IDE軟體
●eclipse+pydev外掛程式:方便調試程式
●emacs:自帶python支持,自動補全、refactor等功能需要外掛程式支持
●Vim:最新7.3版編譯時可以加入python支持,提供python代碼自動提示支持
●VisualStudio2003+VisualPython:僅適用Windows,已停止維護,功能較差
●VisualStudio2010+PythonToolsforVisualStudio
●TextMate
●NetbeansIDE
另外,諸如EditPlus、UltraEdit、PSPad等通用的程式設計師文本編輯器軟體也能對Python代碼編輯提供一定的支持,比如代碼自動著色、注釋快捷鍵等,但是否夠得上集成開發環境的水平,尚有待評估。
問題
1、運行速度慢
2、國內市場較小
3、中文資料匱乏(好的python中文資料屈指可數)。托社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容還是只能看英語版
4、構架選擇太多,不過這也從另一個側面說明,python比較優秀,吸引的人才多,項目也多
學習網站
Python官方文檔
PythonTab中文網
Python愛好者論壇
Pythoner線上互動交流平台
python菜鳥教程
python基礎教程