發新話題

Python 百科全書

Python 百科全書

Python([KK] 英語發音: /'paɪθɑn/, [DJ] 英語發音: /ˈpaiθən/),是一種物件導向、直譯式電腦程式語言,也是一種功能強大的通用型語言,已經具有十多年的發展歷史,成熟且穩定。它包含了一組完善而且容易理解的標準函式庫,能夠輕鬆完成很多常見的任務。它的語法非常簡捷和清晰,與其它電腦程式語言不一樣,它採用縮排來定義語句塊。

Python支援指令式編程、物件導向程式設計、函數語言程式設計、面向切面程式、泛型程式多種程式範式。與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理內部記憶體使用。它經常被當作指令碼語言用於處理系統管理任務和Web程式,然而它也非常適合完成各種高階任務。Python虛擬機器本身幾乎可以在所有的作業系統中執行。使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python原始碼轉換成可以脫離Python直譯器執行的程式。

Python的主要參考實作是CPython,它是一個由社群驅動的自由軟體。目前由Python軟體基金會管理。目前,基於這種語言的相關技術正在飛速的發展,使用者數量急劇擴大,相關的資源非常多。

發展歷史

Python的創始人為吉多·范羅蘇姆。在1989年聖誕節期間的阿姆斯特丹,吉多為了打發聖誕節的無趣,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。之所以選中Python作為程式的名字,是因為他是一個蒙提·派森的飛行馬戲團的愛好者。

ABC是由吉多參加設計的一種教學語言。就吉多本人看來,ABC這種語言非常優美和強大,是專門為非專業程式設計師設計的。但是ABC語言並沒有成功,究其原因,吉多認為是非開放造成的。吉多決心在Python中避免這一錯誤(的確如此,Python與其它的語言如C、C++和Java結合的非常好)。同時,他還想實作在ABC中閃現過但未曾實作的東西。

就這樣,Python在吉多手中誕生了。實際上,第一個實作是在Mac機上。可以說,Python是從ABC發展起來,主要受到了Modula-3(另一種相當優美且強大的語言,為小型團體所設計的)的影響。並且結合了Unix shell和C的習慣。

目前吉多·范羅蘇姆仍然是Python的主要開發者,決定整個Python語言的發展方向。Python社群經常稱呼他是仁慈的獨裁者。

Python 2.0於2000年10月16日發布,主要是實作了完整的垃圾回收,並且支援Unicode。同時,整個開發過程更加透明,社群對開發行程的影響逐漸擴大。2008年12月3發布,經過長時間的測試,Python 3.0發布。它不完全相容之前的Python代碼。不過,很多新特性後來也被移植到舊的Python 2.6/2.7版本。
作為程式語言的設計哲學與定位

Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者總會拒絕花哨的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python原始碼通常認為比Perl具備更好的可讀性。

Python開發人員盡量避開不成熟或者不重要的最佳化。一些針對非重要部位的加快執行速度的修補程式通常不會被合併到Python內。所以很多認為Python很慢。不過,根據二八定律,大多數程式對速度要求不高。在某些對執行速度要求很高的情況,Python程式設計師傾向於使用JIT技術,或者用使用C/C++語言覆寫這部分程式。目前可用的JIT技術是Pysco。Cython可以將Python代碼轉換成C代碼。

相對於Lisp這種傳統的函數語言程式設計語言,Python對函數語言程式設計只提供了有限的支援。有兩個標準函式庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數語言程式設計工具。

雖然Python可能被粗略地分類為「指令碼語言」(script language),但實際上一些大規模軟體開發計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高階動態程式語言,原因是「指令碼語言」泛指僅作簡單程式任務的語言,如shell script、JavaScript等只能處理簡單任務的程式語言,並不能與Python相提並論。

Python本身被設計為可延伸的。並非所有的特性和功能都整合到語言核心。可以使用C語言、C++、Cython來編寫擴充功能模組。Python直譯器本身也可以被整合到其它需要指令碼語言的程式內。因此,很多人還把Python作為一種「膠水語言」(glue language)使用。使用Python將其他語言編寫的程式進行整合和封裝。在Google內部的很多專案使用C++編寫性能要求極高的部分,然後用Python呼叫相應的模組。
標準函式庫

Python之所以有這麼大的魅力,原因之一就是它有一個強大的標準函式庫。Python語言的核心只包含數位、字串、列表、字典、檔案等常見型別和函式,而由Python標準函式庫提供了系統管理、網路通訊、文字處理、資料庫介面、圖形系統、XML處理等額外的功能。Python標準函式庫命名介面清晰、文檔良好,很容易學習和使用。

Python社群提供了大量的第三方模組,使用方式與標準函式庫類似。它們的功能無所不包,覆蓋科學計算、Web開發、資料庫介面、圖形系統多個領域,並且大多成熟而穩定。第三方模組可以使用Python或者C語言編寫。SWIG,SIP常用於將C語言編寫的程式函式庫轉化為Python模組。Boost C++ 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等

Hello World程式

下面是一個在標準輸出裝置上輸出Hello World的簡單程式,這種程式通常作為開始學習程式語言時的第一個程式:

    *
      適用於Python 3.0以上版本以及Python 2.6, Python 2.7

print("Hello, world!")

    *

      適用於Python 2.6以下版本以及Python 2.6, Python 2.7

print "Hello, world!"

Python也可以單步直譯執行。執行Python直譯器進入互動式命令列的環境,你可以在提示符號>>>旁輸入print("Hello, world!"),按Enter鍵輸出結果:

    *

      適用於Python 3.0以上版本以及Python 2.6, Python 2.7

>>> print("Hello, world!")
Hello, world!

    *

      適用於Python 2.6以下版本以及Python 2.6, Python 2.7

>>> print "Hello, world!"
Hello, world!

注意,低於2.5版本的Python要去掉"Hello, world!"周圍的括弧。Python 3.x與Python 2.x的print函式語法是不一樣的。

TOP

語言特色
Python是一門跨平台的指令碼語言,Python規定了一個Python語法規則,實作了Python語法的解釋程式就成為了Python的直譯器,我們用的比較多的是C版本的Python,也就是使用C語言實作的Python直譯器,除此之外還有使用Java實作的Jython和使用.NET實作的IronPython,這些實作可以使Python使用者充分利用己有的Java及.NET資源。

同時,Python支援幾乎所有常用的作業系統,包括:Windows/DOS、Macintosh、Linux及FreeBSD。及很多不常用的作業系統,包括AIX、AS/400 (OS/400)、BeOS、OS/2、OS/390與z/OS、Palm OS、PlayStation與PSP、Psion、QNX、RISC OS、Series 60、Sparc Solaris、VMS、VxWorks、Windows CE或Pocket PC、Sharp Zaurus、MorphOS等。

可擴充性可說是Python作為一種編程語言的特色。新的內置模組(module)可以用C或C++寫成。而我們也可為現成的模組加上Python的介面。Python可以使使用者避免過分的語法的羈絆而將精力主要集中到所要實作的程式任務上。

因此Python具有非常龐大的程式函式庫,透過它們可以快速完成絕大部分常用的任務,如:從某個URL中獲取資訊、正規表式、獲得某個檔案或字串的MD5特徵字串、多執行緒、XML及HTML的分析等。

Python也被稱為是一門清晰的語言。因為它的作者在設計它的時候,總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由Python資深開發者Tim Peters所作的Python格言(The Zen of Python)裡面表述為:

    There should be one-- and preferably only one --obvious way to do it.

另外,在Chris DiBona(Google開源碼網站負責人)和Leo Laporte(Twit網站創始人) 的訪談中,Guido van Rossum也提出一個口號:

    There is only one way to do it.(做一件事情只有一個方法。)

有意思的是,這正好和Perl語言(另一種功能類似的高階動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It.)完全相反,這似乎是人們常把Perl和Python互相比較的重要原因。

著名Python培訓專家Mark Lutz則表示,Peters的話中最值得一提的是:

    Explicit is better than implicit.(明言勝於暗示。)

這句話在Python使用者社群中通常簡寫作EIBTI(Explicit Is Better Than Implicit.)。Lutz認為這一特色性原則是Python和其他各種程式語言之間最重要的區別。

Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計限制性很強的語法,使得不好的程式習慣(例如if語句的下一行不向右縮排)都不能透過編譯。這樣有意的強制程式設計師養成良好的程式習慣。其中很重要的一項就是Python的縮排規則。

例如if語句:

if age < 21:
    print "You cannot buy wine!"
    print "But you can buy chewing gum."
print "this is outside if"

一個和其他大多數語言(如C語言)的區別就是,一個語句塊的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括弧{ }來明確的定出語句塊的邊界的,與字元的位置毫無關聯)。這一點曾經引起過爭議。因為自從C這類的語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程式語言的進步。不過不可否認的是,透過強制程式設計師們縮排(包括if,for和函式定義等所有需要使用模組的地方),Python確實使得程式更加清晰和美觀。

另外Python在其他部分的設計上也堅持了清晰劃一的風格,這使得Python稱為一門易讀性、易維護性好,並且被大量使用者所歡迎的、用途廣泛的語言。
Python 3.0

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程式建議使用Python 3.0版本的語法。除非執行環境無法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方函式庫。目前不支援Python 3.0的第三方函式庫有Django, Twisted, py2exe, PIL等。大多數第三方函式庫都正在努力地相容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫相容Python 3.0版本的程式,然後使用Python 2.6, Python 2.7來執行。Python 2.7被確定為最後一個Python 2.x版本。
主要變化

Python 3.0的變化主要在以下幾個方面:

部分函式和語句的改變:

最引人注意的改變是print語句沒有了,取而代之的是print函式;

字串和位元組:

類似Java,str類表示一個Unicode字串,代替了早期版本的unicode類。而一堆位元組則用類似b"abc"的語法建立,用bytes類表示;

其他變化:
各種實作

    * CPython(Classic Python,也就是原始的經典Python實作,需要區別於其他實作的時候才以CPython稱呼;或解作C語言實作的Python)
    * Jython(原名JPython;Java語言實作的Python,現已正式發布)
    * PyPy(使用Python語言寫的Python)
    * IronPython(面向.NET和ECMA CLI的Python實作)
    * 周蟒(支援繁簡中文的Python語言)

整合式開發環境

適用於Python的整合式開發環境(IDE)軟體,除了標準二進制發布包所附的IDLE之外,還有許多其他選擇。其中有些軟體設計有語法著色、語法檢查、執行偵錯、自動補全、智慧感知等便利功能。由於Python的跨平台出身,這些軟體往往也具備各種作業系統的版本或一定的移植性。

專門為Python設計的IDE軟體:

    * IDLE:Python「標準」IDE
    * Komodo和Komodo Edit:後者是前者的免費精簡版
    * PythonWin:ActivePython軟體包的IDE,僅適用於Windows
    * SPE(Stani's Python Editor):功能較多的自由軟體,依賴wxPython
    * Ulipad:功能較全的自由軟體,依賴wxPython;作者是中國Python高手limodou
    * WingIDE:可能是功能最全的IDE,但不是自由軟體
    * Eric:基於PyQt的自由軟體,功能強大

有相應外掛程式的通用IDE軟體(使用難度往往較大):

    * eclipse + pydev外掛程式:穩定性欠佳
    * NetBeans + 外掛程式
    * emacs + 外掛程式
    * Vim + 外掛程式
    * Visual Studio .NET 2003 + VisualPython:僅適用Windows,已停止維護,功能較差
    * SlickEdit
    * TextMate

另外,諸如EditPlus、UltraEdit、PSPad等通用的程式設計師文字編輯器軟體也能對Python代碼文字作出一定解釋,但是否夠得上整合式開發環境的水平,尚有待評估。
著名應用

    * Pylons--Pylons web framework
    * Zope--應用伺服器
    * Plone--內容管理系統
    * Django--鼓勵快速開發的web framework
    * Twisted--Python的網路應用程式框架
    * TurboGears--另一個Web應用快速開發框架
    * Python Wikipedia Robot Framework--MediaWiki的機器人程式
    * MoinMoinWiki--Python寫成的wiki
本帖最近評分記錄
  • qqwry 金幣 +10 內容精彩 2012-8-24 15:54
  • qqwry 經驗 +10 內容精彩 2012-8-24 15:54

TOP

推薦,Python是一款很棒的跨平臺通用型語言。。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。