Python
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
Python,是一種面向對象、解釋型電腦程式設計語言,由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年,Python 源代碼同樣遵循 GPL(GNU General Public License)協議。Python語法簡潔而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。常見的一種應用情形是,使用Python快速生成程式的原型(有時甚至是程式的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。
- 簡單: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、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。
運行程式的時候,連接/轉載器軟體把你的程式從硬碟複製到記憶體中並且運行。而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 是一種不受局限、跨平臺的開源編程語言,它功能強大且簡單易學。因而得到了廣泛應用和支持。
ArcGIS 9.0 社區中引入了 Python。此後,Python 被視為可供地理處理用戶選擇的腳本語言並得以不斷發展。每個版本都進一步增強了 Python 體驗,從而為您提供更多的功能以及更豐富、更友好的 Python 體驗。
ESRI 已將 Python 完全納入 ArcGIS 中,並將其視為可滿足我們用戶社區需求的語言。下麵僅介紹 Python 的部分優勢:
- 易於學習,非常適合初學者,也特別適合專家使用
- 可伸縮程度高,適於大型項目或小型的一次性程式(稱為腳本)
- 可移植,跨平臺
- 可嵌入(使 ArcGIS 可腳本化)
- 穩定成熟
- 用戶社區規模大
Python 已延伸到 ArcGIS 中,成為了一種用於進行數據分析、數據轉換、數據管理和地圖自動化的語言,因而有助於提高工作效率。
- 強制縮進:這也許不應該被稱為局限,但是它用縮進來區分語句關係的方式還是給很多初學者帶來了困惑。
- 單行語句和命令行輸出問題:很多時候不能將程式連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程式,不需要如Python一樣,必須將程式寫入一個.py文件。
- 圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。
- 數學處理:NumPy擴展提供大量與許多標準數學庫的介面。
- 資料庫編程:程式員可通過遵循Python DB-API(資料庫應用程式編程介面)規範的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,Mysql、SQLite等資料庫通信。python自帶有一個Gadfly模塊,提供了一個完整的SQL環境。
- 網路編程:提供豐富的模塊支持sockets編程,能方便快速地開發分散式應用程式。很多大規模軟體開發計劃例如Zope,Mnet 及BitTorrent. Google都在廣泛地使用它。
- Web編程:應用的開發語言,支持最新的XML技術。
- 多媒體應用:Python的PyOpenGL模塊封裝了“OpenGL應用程式編程介面”,能進行二維和三維圖像處理。PyGame模塊可用於編寫游戲軟體。
Python的創始人為Guido van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程式,做為ABC 語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為程式的名字,是因為他是一個叫Monty Python的喜劇團體的愛好者。
ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言非常優美和強大,是專門為非專業程式員設計的。但是ABC語言並沒有成功,究其原因,Guido 認為是非開放造成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實現在ABC 中閃現過但未曾實現的東西。
就這樣,Python在Guido手中誕生了。實際上,第一個實現是在Mac機上。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。並且結合了Unix shell和C的習慣。
Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,並且被大量用戶所歡迎的、用途廣泛的語言。
設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由Tim Peters寫的python格言(稱為The Zen of Python)裡面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
Python的作者有意的設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。
一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括弧{}來明確的定出模塊的邊界的,與字元的位置毫無關係)。這一點曾經引起過爭議。因為自從C這類的語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程式語言的進步。不過不可否認的是,通過強制程式員們縮進(包括if,for和函數定義等所有需要使用模塊的地方),Python確實使得程式更加清晰和美觀。
Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(位元組碼),然後再由Python Virtual Machine(Python 虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。
這裡的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。或者可以這麼說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。
基於C的Python編譯出的位元組碼文件,通常是.pyc格式。
- Tkinter: Python預設的圖形界面介面。Tkinter是一個和Tk介面的Python模塊,Tkinter庫提供了對Tk API的介面,它屬於Tcl/Tk的GUI工具組。
- PyGTK: 用於python GUI程式開發的GTK+庫。GTK就是用來實現GIMP和Gnome的庫。
- PyQt: 用於python的Qt開發庫。QT就是實現了KDE環境的那個庫,由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個類和超過5750個的函數和方法。PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt介面.
- wxPython:GUI編程框架,熟悉MFC的人會非常喜歡,簡直是同一架構(對於初學者或者對設計要求不高的用戶來說,使用Boa Constructor可以方便迅速的進行wxPython的開發)。
- PIL:python提供強大的圖形處理的能力,並提供廣泛的圖形文件格式支持,該庫能進行圖形格式的轉換、列印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉等。是Python用戶進行圖象處理的強有力工具。
- Psyco:一個Python代碼加速度器,可使Python代碼的執行速度提高到與編譯語言一樣的水平。
- xmpppy:Jabber伺服器採用開發的XMPP協議,Google Talk也是採用XMPP協議的IM系統。在Python中有一個xmpppy模塊支持該協議。也就是說,我們可以通過該模塊與Jabber伺服器通信,是不是很Cool。
Python的3.0版本,在開發階段被稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。為了不帶入過多的累贅,Python 3.0在設計的時候就沒有考慮向下兼容。許多針對早期Python版本設計的程式都無法在Python 3.0上正常運行。為了照顧現有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移。基於早期Python版本而能正常運行於Python 2.6並無警告的程式可以通過一個2 to 3的轉換工具無縫遷移到Python 3.0。
Python 3.0的變化主要在以下幾個方面:
- 部分函數和語句的改變:最引人註意的改變是print語句沒有了,取而代之的是print函數。
- 字元串和位元組:類似Java,str類表示一個Unicode字元串,代替了早期版本的unicode類。而一堆位元組則用類似b"abc"的語法創建,用bytes類表示。
- IDLE:Python內置IDE (隨python安裝包提供)
- Komodo和Komodo Edit:後者是前者的免費精簡版
- PythonWin:ActivePython或pywin32均提供該IDE,僅適用於Windows
- SPE(Stani's Python Editor):功能較多的自由軟體,基於wxPython
- Ulipad:功能較全的自由軟體,基於wxPython;作者是中國Python高手limodou
- Eric:基於PyQt的自由軟體,功能強大。全名是:The Eric Python IDE
- DrPython
- PyScripter:使用Delphi開發的輕量級的開源Python IDE, 支持Python2.6和3.0。
- PyPE:一個開源的跨平臺的PythonIDE。
- bpython: 類Unix操作系統下使用curses庫開發的輕量級的Python解釋器。語法提示功能。
- eclipse + pydev插件:方便調試程式
- emacs:自帶python支持,自動補全、refactor等功能需要插件支持
- Vim: 最新7.3版編譯時可以加入python支持,提供python代碼自動提示支持
- Visual Studio 2003 + VisualPython:僅適用Windows,已停止維護,功能較差
- SlickEdit
- Visual Studio 2010 + Python Tools for Visual Studio
- TextMate
- Netbeans IDE
另外,諸如EditPlus、UltraEdit、PSPad等通用的程式員文本編輯器軟體也能對Python代碼編輯提供一定的支持,比如代碼自動著色、註釋快捷鍵等,但是否夠得上集成開發環境的水平,尚有待評估。
- 運行速度慢。
- 國內市場較小。
- 中文資料匱乏(好的python中文資料屈指可數)。托社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級內容還是只能看英語版。
- 構架選擇太多。不過這也從另一個側面說明,python比較優秀,吸引的人才多,項目也多。
感覺太籠統了