?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語言,由荷蘭人Guido van Rossum于1989年發(fā)明,第一個(gè)公開發(fā)行版發(fā)行于1991年。
Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議 。
Python語法簡(jiǎn)潔清晰,特色之一是強(qiáng)制用空白符(white space)作為語句縮進(jìn)。
Python具有豐富和強(qiáng)大的庫(kù)。它常被昵稱為膠水語言,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起。常見的一種應(yīng)用情形是,使用Python快速生成程序的原型(有時(shí)甚至是程序的最終界面),然后對(duì)其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而后封裝為Python可以調(diào)用的擴(kuò)展類庫(kù)。需要注意的是在您使用擴(kuò)展類庫(kù)時(shí)可能需要考慮平臺(tái)問題,某些可能不提供跨平臺(tái)的實(shí)現(xiàn)。
發(fā)展歷程
自從20世紀(jì)90年代初Python語言誕生至今,它已被逐漸廣泛應(yīng)用于系統(tǒng)管理任務(wù)的處理和Web編程。
Python的創(chuàng)始人為Guido van Rossum。1989年圣誕節(jié)期間,在阿姆斯特丹,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個(gè)新的腳本解釋程序,做為ABC 語言的一種繼承。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是因?yàn)樗且粋€(gè)叫Monty Python的喜劇團(tuán)體的愛好者。
ABC是由Guido參加設(shè)計(jì)的一種教學(xué)語言。就Guido本人看來,ABC 這種語言非常優(yōu)美和強(qiáng)大,是專門為非專業(yè)程序員設(shè)計(jì)的。但是ABC語言并沒有成功,究其原因,Guido 認(rèn)為是其非開標(biāo)識(shí)放造成的。Guido 決心在Python 中避免這一錯(cuò)誤。同時(shí),他還想實(shí)現(xiàn)在ABC 中閃現(xiàn)過但未曾實(shí)現(xiàn)的東西。
就這樣,Python在Guido手中誕生了??梢哉f,Python是從ABC發(fā)展起來,主要受到了Modula-3(另一種相當(dāng)優(yōu)美且強(qiáng)大的語言,為小型團(tuán)體所設(shè)計(jì)的)的影響。并且結(jié)合了Unix shell和C的習(xí)慣。
Python已經(jīng)成為最受歡迎的程序設(shè)計(jì)語言之一。2011年1月,它被TIOBE編程語言排行榜評(píng)為2010年度語言。自從2004年以后,python的使用率呈線性增長(zhǎng)。
由于Python語言的簡(jiǎn)潔性、易讀性以及可擴(kuò)展性,在國(guó)外用Python做科學(xué)計(jì)算的研究機(jī)構(gòu)日益增多,一些知名大學(xué)已經(jīng)采用Python來教授程序設(shè)計(jì)課程。例如卡耐基梅隆大學(xué)的編程基礎(chǔ)、麻省理工學(xué)院的計(jì)算機(jī)科學(xué)及編程導(dǎo)論就使用Python語言講授。眾多開源的科學(xué)計(jì)算軟件包都提供了Python的調(diào)用接口,例如著名的計(jì)算機(jī)視覺庫(kù)OpenCV、三維可視化庫(kù)VTK、醫(yī)學(xué)圖像處理庫(kù)ITK。而Python專用的科學(xué)計(jì)算擴(kuò)展庫(kù)就更多了,例如如下3個(gè)十分經(jīng)典的科學(xué)計(jì)算擴(kuò)展庫(kù):NumPy、SciPy和matplotlib,它們分別為Python提供了快速數(shù)組處理、數(shù)值運(yùn)算以及繪圖功能。因此Python語言及其眾多的擴(kuò)展庫(kù)所構(gòu)成的開發(fā)環(huán)境十分適合工程技術(shù)、科研人員處理實(shí)驗(yàn)數(shù)據(jù)、制作圖表,甚至開發(fā)科學(xué)計(jì)算應(yīng)用程序。
說起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。然而除了MATLAB的一些專業(yè)性很強(qiáng)的工具箱還無法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫(kù)。和MATLAB相比,用Python做科學(xué)計(jì)算有如下優(yōu)點(diǎn):
● 首先,MATLAB是一款商用軟件,并且價(jià)格不菲。而Python完全免費(fèi),眾多開源的科學(xué)計(jì)算庫(kù)都提供了Python的調(diào)用接口。用戶可以在任何計(jì)算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫(kù)。
● 其次,與MATLAB相比,Python是一門更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語言。它能讓用戶編寫出更易讀、易維護(hù)的代碼。
● 最后,MATLAB主要專注于工程和科學(xué)計(jì)算。然而即使在計(jì)算領(lǐng)域,也經(jīng)常會(huì)遇到文件管理、界面設(shè)計(jì)、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫(kù),可以輕易完成各種高級(jí)任務(wù),開發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。
風(fēng)格
Python在設(shè)計(jì)上堅(jiān)持了清晰劃一的風(fēng)格,這使得Python成為一門易讀、易維護(hù),并且被大量用戶所歡迎的、用途廣泛的語言。
設(shè)計(jì)者開發(fā)時(shí)總的指導(dǎo)思想是,對(duì)于一個(gè)特定的問題,只要有一種最好的方法來解決就好了。這在由Tim Peters寫的Python格言(稱為The Zen of Python)里面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高級(jí)動(dòng)態(tài)語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
Python的作者有意的設(shè)計(jì)限制性很強(qiáng)的語法,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進(jìn))都不能通過編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。
一個(gè)和其他大多數(shù)語言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來決定的(而C語言是用一對(duì)花括號(hào){}來明確的定出模塊的邊界的,與字符的位置毫無關(guān)系)。這一點(diǎn)曾經(jīng)引起過爭(zhēng)議。因?yàn)樽詮腃這類的語言誕生后,語言的語法含義與字符的排列方式分離開來,曾經(jīng)被認(rèn)為是一種程序語言的進(jìn)步。不過不可否認(rèn)的是,通過強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。
設(shè)計(jì)定位
Python的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡(jiǎn)單”。因此,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發(fā)者中通常是難以忍受的。Python開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來做一件事”。在設(shè)計(jì)Python語言時(shí),如果面臨多種選擇,Python開發(fā)者一般會(huì)拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由于這種設(shè)計(jì)觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開發(fā)。這些準(zhǔn)則被稱為Python格言。在Python解釋器內(nèi)運(yùn)行import this可以獲得完整的列表。
Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化。一些針對(duì)非重要部位的加快運(yùn)行速度的補(bǔ)丁通常不會(huì)被合并到Python內(nèi)。所以很多人認(rèn)為Python很慢。不過,根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓?。在某些?duì)運(yùn)行速度要求很高的情況,Python設(shè)計(jì)師傾向于使用JIT技術(shù),或者用使用C/C++語言改寫這部分程序??捎玫腏IT技術(shù)是PyPy。
Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù)(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。
雖然Python可能被粗略地分類為“腳本語言”(script language),但實(shí)際上一些大規(guī)模軟件開發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高級(jí)動(dòng)態(tài)編程語言,原因是“腳本語言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語言,如shellscript、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語言,并不能與Python相提并論。
Python本身被設(shè)計(jì)為可擴(kuò)充的。并非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。《Python技術(shù)手冊(cè)》的作者馬特利(Alex Martelli)說:“這很難講,不過,2004 年,Python 已在Google 內(nèi)部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場(chǎng)合使用 C++,在快速開發(fā)時(shí)候使用 Python。”
執(zhí)行
Python在執(zhí)行時(shí),首先會(huì)將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機(jī))來執(zhí)行這些編譯好的byte code。這種機(jī)制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級(jí)的Virtual Machine。這里的高級(jí)并不是通常意義上的高級(jí),不是說Python的Virtual Machine比Java或.NET的功能更強(qiáng)大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實(shí)機(jī)器的距離更遠(yuǎn)?;蛘呖梢赃@么說,Python的Virtual Machine是一種抽象層次更高的Virtual Machine。
基于C的Python編譯出的字節(jié)碼文件,通常是.pyc格式。
除此之外,Python還可以以交互模式運(yùn)行,比如主流操作系統(tǒng)Unix/Linux、Mac、Windows都可以直接在命令模式下直接運(yùn)行Python交互環(huán)境。直接下達(dá)操作指令即可實(shí)現(xiàn)交互操作。
基本語法
Python的設(shè)計(jì)目標(biāo)之一是讓代碼具備高度的可閱讀性。它設(shè)計(jì)時(shí)盡量使用其它語言經(jīng)常使用的標(biāo)點(diǎn)符號(hào)和英文單字,讓代碼看起來整潔美觀。它不像其他的靜態(tài)語言如C、Pascal那樣需要重復(fù)書寫聲明語句,也不像它們的語法那樣經(jīng)常有特殊情況和意外。
縮進(jìn)
Python開發(fā)者有意讓違反了縮進(jìn)規(guī)則的程序不能通過編譯,以此來強(qiáng)制程序員養(yǎng)成良好的編程習(xí)慣。并且Python語言利用縮進(jìn)表示語句塊的開始和退出(Off-side規(guī)則),而非使用花括號(hào)或者某種關(guān)鍵字。增加縮進(jìn)表示語句塊的開始,而減少縮進(jìn)則表示語句塊的退出??s進(jìn)成為了語法的一部分。例如if語句:
if age<21:
print("你不能買酒。")
print("不過你能買口香糖。")
print("這句話處?kù)秈f語句塊的外面。")
注:上述例子為python 3.0版本的代碼
根據(jù)PEP的規(guī)定,必須使用4個(gè)空格來表示每級(jí)縮進(jìn)(不清楚4個(gè)空格的規(guī)定如何,在實(shí)際編寫中可以自定義空格數(shù),但是要滿足每級(jí)縮進(jìn)間空格數(shù)相等)。使用Tab字符和其它數(shù)目的空格雖然都可以編譯通過,但不符合編碼規(guī)范。支持Tab字符和其它數(shù)目的空格僅僅是為兼容很舊的的Python程序和某些有問題的編輯程序。
控制語句
if語句,當(dāng)條件成立時(shí)運(yùn)行語句塊。經(jīng)常與else, elif(相當(dāng)于else if) 配合使用。
for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個(gè)元素。
while語句,當(dāng)條件為真時(shí),循環(huán)運(yùn)行語句塊。
try語句。與except,finally配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況。
class語句。用于定義類型。
def語句。用于定義函數(shù)和類型的方法。
pass語句。表示此行為空,不運(yùn)行任何操作。
assert語句。用于程序調(diào)試階段時(shí)測(cè)試運(yùn)行條件是否滿足。
with語句。Python2.6以后定義的語法,在一個(gè)場(chǎng)景中運(yùn)行語句塊。比如,運(yùn)行語句塊前加密,然后在語句塊運(yùn)行退出后解密。
yield語句。在迭代器函數(shù)內(nèi)使用,用于返回一個(gè)元素。自從Python 2.5版本以后。這個(gè)語句變成一個(gè)運(yùn)算符。
raise語句。制造一個(gè)錯(cuò)誤。
import語句。導(dǎo)入一個(gè)模塊或包。
from import語句。從包導(dǎo)入模塊或從模塊導(dǎo)入某個(gè)對(duì)象。
import as語句。將導(dǎo)入的對(duì)象賦值給一個(gè)變量。
in語句。判斷一個(gè)對(duì)象是否在一個(gè)字符串/列表/元組里。
表達(dá)式
Python的表達(dá)式寫法與C/C++類似。只是在某些寫法有所差別。
主要的算術(shù)運(yùn)算符與C/C++類似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負(fù)、乘法、除法、整除、乘方、取補(bǔ)、取模。>>, <<表示右移和左移。&, |, ^表示二進(jìn)制的AND, OR, XOR運(yùn)算。>, <, ==, !=, <=, >=用于比較兩個(gè)表達(dá)式的值,分別表示大于、小于、等于、不等于、小于等于、大于等于。在這些運(yùn)算符里面,~, |, ^, &, <<, >>必須應(yīng)用于整數(shù)。
Python使用and, or, not表示邏輯運(yùn)算。
is, is not用于比較兩個(gè)變量是否是同一個(gè)對(duì)象。in, not in用于判斷一個(gè)對(duì)象是否屬于另外一個(gè)對(duì)象。
Python支持“列表推導(dǎo)式”(list comprehension),比如計(jì)算0-9的平方和:
>>> sum(x * x for x in range(10))
285
Python使用lambda表示匿名函數(shù)。匿名函數(shù)體只能是表達(dá)式。比如:
>>> add=lambda x, y : x + y
>>> add(3,2)
5
Python使用y if cond else x表示條件表達(dá)式。意思是當(dāng)cond為真時(shí),表達(dá)式的值為y,否則表達(dá)式的值為x。相當(dāng)于C++和Java里的cond?y:x。
Python區(qū)分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)??梢愿淖僱ist中的元素,而不能改變tuple。在某些情況下,tuple的括號(hào)可以省略。tuple對(duì)于賦值語句有特殊的處理。因此,可以同時(shí)賦值給多個(gè)變量,比如:
>>> x, y=1,2#同時(shí)給x,y賦值,最終結(jié)果:x=1, y=2
特別地,可以使用以下這種形式來交換兩個(gè)變量的值:
>>> x, y=y, x #最終結(jié)果:y=1, x=2
Python使用'(單引號(hào))和"(雙引號(hào))來表示字符串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不一樣,兩種符號(hào)作用相同。一般地,如果字符串中出現(xiàn)了雙引號(hào),就使用單引號(hào)來表示字符串;反之則使用雙引號(hào)。如果都沒有出現(xiàn),就依個(gè)人喜好選擇。出現(xiàn)在字符串中的\(反斜杠)被解釋為特殊字符,比如\n表示換行符。表達(dá)式前加r指示Python不解釋字符串中出現(xiàn)的\。這種寫法通常用于編寫正則表達(dá)式或者Windows文件路徑。
Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的類型有str, bytes, list, tuple等。它的語法是...[left:right]或者...[left:right:stride]。假定nums變量的值是[1, 3, 5, 7, 8, 13, 20],那么下面幾個(gè)語句為真:
nums[2:5] == [5, 7, 8] 從下標(biāo)為2的元素切割到下標(biāo)為5的元素,但不包含下標(biāo)為5的元素。
nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最后一個(gè)元素。
nums[:-3] == [1, 3, 5, 7] 從最開始的元素一直切割到倒數(shù)第3個(gè)元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回所有元素。改變新的列表不會(huì)影響到nums。
nums[1:5:2] == [3, 7] 從下標(biāo)為1的元素切割到下標(biāo)為5的元素但不包含下標(biāo)為5的元素,且步長(zhǎng)為2。
函數(shù)
Python的函數(shù)支持遞歸、默認(rèn)參數(shù)值、可變參數(shù),但不支持函數(shù)重載。為了增強(qiáng)代碼的可讀性,可以在函數(shù)后書寫“文檔字符串”(Documentation Strings,或者簡(jiǎn)稱docstrings),用于解釋函數(shù)的作用、參數(shù)的類型與意義、返回值類型與取值范圍等??梢允褂脙?nèi)置函數(shù)help()打印出函數(shù)的使用幫助。比如:
>>> def randint(a, b):
... "Return random integer in range [a, b], including both end points."...
>>> help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.
對(duì)象的方法
對(duì)象的方法是指綁定到對(duì)象的函數(shù)。調(diào)用對(duì)象方法的語法是instance.method(arguments)。它等價(jià)于調(diào)用Class.method(instance, arguments)。當(dāng)定義對(duì)象方法時(shí),必須顯式地定義第一個(gè)參數(shù),一般該參數(shù)名都使用self,用于訪問對(duì)象的內(nèi)部數(shù)據(jù)。這里的self相當(dāng)于C++, Java里面的this變量,但是我們還可以使用任何其它合法的參數(shù)名,比如this 和 mine 等,self與C++,Java里面的this不完全一樣,它可以被看作是一個(gè)習(xí)慣性的用法,我們傳入任何其它的合法名稱都行,比如:
class Fish:
def eat(self,food):
if food is not None:
self.hungry=False
class User:
def__init__(myself,name):
myself.name=name
#構(gòu)造Fish的實(shí)例:
f=Fish()
#以下兩種調(diào)用形式是等價(jià)的:
Fish.eat(f,"earthworm")
f.eat("earthworm")
u=User('username')
print(u.name)
Python認(rèn)識(shí)一些以“__”開始并以“__”結(jié)束的特殊方法名,它們用于實(shí)現(xiàn)運(yùn)算符重載和實(shí)現(xiàn)多種特殊功能。
類型
Python采用動(dòng)態(tài)類型系統(tǒng)。在編譯的時(shí)候,Python不會(huì)檢查對(duì)象是否擁有被調(diào)用的方法或者屬性,而是直至運(yùn)行時(shí),才做出檢查。所以操作對(duì)象時(shí)可能會(huì)拋出異常。不過,雖然Python采用動(dòng)態(tài)類型系統(tǒng),它同時(shí)也是強(qiáng)類型的。Python禁止沒有明確定義的操作,比如數(shù)字加字符串。
與其它面向?qū)ο笳Z言一樣,Python允許程序員定義類型。構(gòu)造一個(gè)對(duì)象只需要像函數(shù)一樣調(diào)用類型即可,比如,對(duì)于前面定義的Fish類型,使用Fish()。類型本身也是特殊類型type的對(duì)象(type類型本身也是type對(duì)象),這種特殊的設(shè)計(jì)允許對(duì)類型進(jìn)行反射編程。
Python內(nèi)置豐富的數(shù)據(jù)類型。與Java、C++相比,這些數(shù)據(jù)類型有效地減少代碼的長(zhǎng)度。下面這個(gè)列表簡(jiǎn)要地描述了Python內(nèi)置數(shù)據(jù)類型(適用于Python 3.x):
類型
str
一個(gè)由字符組成的不可更改的有串行。
'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
在Python 3.x里,字符串由Unicode字符組成
bytes
一個(gè)由字節(jié)組成的不可更改的有串行。
b'Some ASCII'
b"Some ASCII"
list
可以包含多種類型的可改變的有串行
[4.0, 'string', True]
tuple
可以包含多種類型的不可改變的有串行
(4.0, 'string', True)
set, frozenset
與數(shù)學(xué)中集合的概念類似。無序的、每個(gè)元素唯一。
{4.0, 'string', True}
frozenset([4.0, 'string', True])
dict
一個(gè)可改變的由鍵值對(duì)組成的無串行。
{'key1': 1.0, 3: False}
int
精度不限的整數(shù)
42
float
浮點(diǎn)數(shù)。精度與系統(tǒng)相關(guān)。
3.1415927
complex
復(fù)數(shù)
3+2.7j
bool
邏輯值。只有兩個(gè)值:真、假
True
False
除了各種數(shù)據(jù)類型,Python語言還用類型來表示函數(shù)、模塊、類型本身、對(duì)象的方法、編譯后的Python代碼、運(yùn)行時(shí)信息等等。因此,Python具備很強(qiáng)的動(dòng)態(tài)性。
數(shù)學(xué)運(yùn)算
Python使用與C、Java類似的運(yùn)算符,支持整數(shù)與浮點(diǎn)數(shù)的數(shù)學(xué)運(yùn)算。同時(shí)還支持復(fù)數(shù)運(yùn)算與無窮位數(shù)(實(shí)際受限于計(jì)算機(jī)的能力)的整數(shù)運(yùn)算。除了求絕對(duì)值函數(shù)abs()外,大多數(shù)數(shù)學(xué)函數(shù)處于math和cmath模塊內(nèi)。前者用于實(shí)數(shù)運(yùn)算,而后者用于復(fù)數(shù)運(yùn)算。使用時(shí)需要先導(dǎo)入它們,比如:
>>> import math
>>> print(math.sin(math.pi/2))
1.0
fractions模塊用于支持分?jǐn)?shù)運(yùn)算;decimal模塊用于支持高精度的浮點(diǎn)數(shù)運(yùn)算。
Python定義求余運(yùn)行a % b的值處于開區(qū)間[0, b)內(nèi),如果b是負(fù)數(shù),開區(qū)間變?yōu)?b, 0]。這是一個(gè)很常見的定義方式。不過其實(shí)它依賴于整除的定義。為了讓方程式:b * (a // b) + a % b = a恒真,整除運(yùn)行需要向負(fù)無窮小方向取值。比如7 // 3的結(jié)果是2,而(-7) // 3的結(jié)果卻是-3。這個(gè)算法與其它很多編程語言不一樣,需要注意,它們的整除運(yùn)算會(huì)向0的方向取值。
Python允許像數(shù)學(xué)的常用寫法那樣連著寫兩個(gè)比較運(yùn)行符。比如a < b < c與a < b and b < c等價(jià)。C++的結(jié)果與Python不一樣,首先它會(huì)先計(jì)算a < b,根據(jù)兩者的大小獲得0或者1兩個(gè)值之一,然后再與c進(jìn)行比較。
CGI
編輯
CGI 目前由NCSA維護(hù),NCSA定義CGI如下:[4]
CGI(Common Gateway Interface),通用網(wǎng)關(guān)接口,它是一段程序,運(yùn)行在服務(wù)器上如:HTTP服務(wù)器,提供同客戶端HTML頁(yè)面的接口。
CGI程序可以是Python腳本、Perl腳本、Shell腳本、C或者C++程序等。
服務(wù)器
在你進(jìn)行CGI編程前,確保您的Web服務(wù)器支持CGI及已經(jīng)配置了CGI的處理程序。
所有的HTTP服務(wù)器執(zhí)行CGI程序都保存在一個(gè)預(yù)先配置的目錄。這個(gè)目錄被稱為CGI目錄,并按照慣例,它被命名為/var/www/cgi-bin目錄。
CGI文件的擴(kuò)展名為.cgi,python也可以使用.py擴(kuò)展名。
默認(rèn)情況下,Linux服務(wù)器配置運(yùn)行的cgi-bin目錄中為/var/www。
如果想指定的其他運(yùn)行CGI腳本的目錄,可以修改httpd.conf配置文件,如下所示:
<Directory"/var/www/cgi-bin"> Allow Override None Options ExecCGI Order allow,deny Allow from all </Directory> <Directory"/var/www/cgi-bin"> Options All </Directory>
程序
使用Python創(chuàng)建第一個(gè)CGI程序,文件名為hello.py,文件位于/var/www/cgi-bin目錄中,內(nèi)容如下,修改文件的權(quán)限為755:[4]
#!/usr/bin/env python print("Content-type:text/html\r\n\r\n") print("<html>") print("<head>") print("") print("</head>") print("<body>") print("<h2>Hello World! This is my first CGI program</h2>") print("</body>") print("</html>")
以上程序在瀏覽器訪問顯示結(jié)果如下:
1
Hello World! This is my first CGI program
這個(gè)的hello.py腳本是一個(gè)簡(jiǎn)單的Python腳本,腳本第一的輸出內(nèi)容"Content-type:text/html\r\n\r\n"發(fā)送到瀏覽器并告知瀏覽器顯示的內(nèi)容類型為"text/html"。
環(huán)境變量
所有的CGI程序都接收以下的環(huán)境變量,這些變量在CGI程序中發(fā)揮了重要的作用:[4]
變量名
描述
CONTENT_TYPE
這個(gè)環(huán)境變量的值指示所傳遞來的信息的MIME類型。目前,環(huán)境變量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示數(shù)據(jù)來自于HTML表單。
CONTENT_LENGTH
如果服務(wù)器與CGI程序信息的傳遞方式是POST,這個(gè)環(huán)境變量即使從標(biāo)準(zhǔn)輸入STDIN中可以讀到的有效數(shù)據(jù)的字節(jié)數(shù)。這個(gè)環(huán)境變量在讀取所輸入的數(shù)據(jù)時(shí)必須使用。
HTTP_COOKIE
客戶機(jī)內(nèi)的 COOKIE 內(nèi)容。
HTTP_USER_AGENT
提供包含了版本數(shù)或其他專有數(shù)據(jù)的客戶瀏覽器信息。
PATH_INFO
這個(gè)環(huán)境變量的值表示緊接在CGI程序名之后的其他路徑信息。它常常作為CGI程序的參數(shù)出現(xiàn)。
QUERY_STRING
如果服務(wù)器與CGI程序信息的傳遞方式是GET,這個(gè)環(huán)境變量的值即使所傳遞的信息。這個(gè)信息經(jīng)跟在CGI程序名的后面,兩者中間用一個(gè)問號(hào)'?'分隔。
REMOTE_ADDR
這個(gè)環(huán)境變量的值是發(fā)送請(qǐng)求的客戶機(jī)的IP地址,例如上面的192.168.1.67。這個(gè)值總是存在的。而且它是Web客戶機(jī)需要提供給Web服務(wù)器的唯一標(biāo)識(shí),可以在CGI程序中用它來區(qū)分不同的Web客戶機(jī)。
REMOTE_HOST
這個(gè)環(huán)境變量的值包含發(fā)送CGI請(qǐng)求的客戶機(jī)的主機(jī)名。如果不支持你想查詢,則無需定義此環(huán)境變量。
REQUEST_METHOD
提供腳本被調(diào)用的方法。對(duì)于使用 HTTP/1.0 協(xié)議的腳本,僅 GET 和 POST 有意義。
SCRIPT_FILENAME
CGI腳本的完整路徑
SCRIPT_NAME
CGI腳本的的名稱
SERVER_NAME
這是你的 WEB 服務(wù)器的主機(jī)名、別名或IP地址。
SERVER_SOFTWARE
這個(gè)環(huán)境變量的值包含了調(diào)用CGI程序的HTTP服務(wù)器的名稱和版本號(hào)。例如,上面的值為Apache/2.2.14(Unix)
以下是一個(gè)簡(jiǎn)單的CGI腳本輸出CGI的環(huán)境變量:
#!/usr/bin/python import os print"Content-type:text/html\r\n\r\n" print"Environment" for param in os.environ.keys(): print"<b>%20s</b>:%s<\br>" %(param,os.environ[param])
優(yōu)點(diǎn)
簡(jiǎn)單:Python是一種代表簡(jiǎn)單主義思想的語言。閱讀一個(gè)良好的Python程序就感覺像是在讀英語一樣。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身。
易學(xué):Python極其容易上手,因?yàn)镻ython有極其簡(jiǎn)單的說明文檔[6] 。
速度快:Python 的底層是用 C 語言寫的,很多標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)也都是用 C 寫的,運(yùn)行速度非??臁4]
免費(fèi)、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體分享知識(shí)的概念。
高層語言:用Python語言編寫程序的時(shí)候無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。
可移植性:由于它的開源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過改動(dòng)使它能夠工作在不同平臺(tái)上)。這些平臺(tái)包括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平臺(tái)。
解釋性:一個(gè)用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語言(二進(jìn)制代碼,即0和1)。這個(gè)過程通過編譯器和不同的標(biāo)記、選項(xiàng)完成。
運(yùn)行程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。而Python語言寫的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行 程序。
在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語言并運(yùn)行。這使得使用Python更加簡(jiǎn)單。也使得Python程序更加易于移植。
面向?qū)ο螅篜ython既支持面向過程的編程也支持面向?qū)ο蟮木幊?。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來的。
可擴(kuò)展性:如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫,然后在Python程序中使用它們。
可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。
豐富的庫(kù):Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。
規(guī)范的代碼:Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進(jìn)制代碼。
缺點(diǎn)
單行語句和命令行輸出問題:很多時(shí)候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡(jiǎn)單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€(gè).py文件。
獨(dú)特的語法
這也許不應(yīng)該被稱為局限,但是它用縮進(jìn)來區(qū)分語句關(guān)系的方式還是給很多初學(xué)者帶來了困惑。即便是很有經(jīng)驗(yàn)的Python程序員,也可能陷入陷阱當(dāng)中。最常見的情況是tab和空格的混用會(huì)導(dǎo)致錯(cuò)誤,而這是用肉眼無法分別的。
運(yùn)行速度慢:這里是指與C和C++相比。
應(yīng)用
編輯
系統(tǒng)編程:提供API(Application Programming Interface應(yīng)用程序編程接口),能方便進(jìn)行系統(tǒng)維護(hù)和管理,Linux下標(biāo)志性語言之一,是很多系統(tǒng)管理員理想的編程工具[7] 。
圖形處理:有PIL、Tkinter等圖形庫(kù)支持,能方便進(jìn)行圖形處理。
數(shù)學(xué)處理:NumPy擴(kuò)展提供大量與許多標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)的接口。
文本處理:python提供的re模塊能支持正則表達(dá)式,還提供SGML,XML分析模塊,許多程序員利用python進(jìn)行XML程序的開發(fā)。
數(shù)據(jù)庫(kù)編程:程序員可通過遵循Python DB-API(數(shù)據(jù)庫(kù)應(yīng)用程序編程接口)規(guī)范的模塊與Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等數(shù)據(jù)庫(kù)通信。python自帶有一個(gè)Gadfly模塊,提供了一個(gè)完整的SQL環(huán)境。
網(wǎng)絡(luò)編程:提供豐富的模塊支持sockets編程,能方便快速地開發(fā)分布式應(yīng)用程序。很多大規(guī)模軟件開發(fā)計(jì)劃例如Zope,Mnet 及BitTorrent. Google都在廣泛地使用它。
Web編程:應(yīng)用的開發(fā)語言,支持最新的XML技術(shù)。
多媒體應(yīng)用:Python的PyOpenGL模塊封裝了“OpenGL應(yīng)用程序編程接口”,能進(jìn)行二維和三維圖像處理。PyGame模塊可用于編寫游戲軟件。
pymo引擎:PYMO全稱為python memories off,是一款運(yùn)行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系統(tǒng)上的AVG游戲引擎。因其基于python2.0平臺(tái)開發(fā),并且適用于創(chuàng)建秋之回憶(memories off)風(fēng)格的AVG游戲,故命名為PYMO。
黑客編程:python有一個(gè)hack的庫(kù),內(nèi)置了你熟悉的或不熟悉的函數(shù),但是缺少成就感。
用Python寫簡(jiǎn)單爬蟲
首先,要通過urllib2這個(gè)Module獲得對(duì)應(yīng)的HTML源碼。
import urllib2 #調(diào)用urllib2
url='http://www.baidu.com/s?wd=cloga' #把等號(hào)右邊的網(wǎng)址賦值給url
html=urllib2.urlopen(url).read() #html隨意取名 等號(hào)后面的動(dòng)作是打開源代碼頁(yè)面,并閱讀
print html #打印
通過上面這三句就可以將URL的源碼存在content變量中,其類型為字符型。
接下來是要從這堆HTML源碼中提取我們需要的內(nèi)容。用Chrome查看一下對(duì)應(yīng)的內(nèi)容的代碼(也可以用Firefox的Firebug)。
可以看到url的信息存儲(chǔ)在span標(biāo)簽中,要獲取其中的信息可以用正則式。
工具功能
編輯
Tkinter
Python默認(rèn)的圖形界面接口。Tkinter是一個(gè)和Tk接口的Python模塊,Tkinter庫(kù)提供了對(duì)Tk API的接口,它屬于Tcl/Tk的GUI工具組。
PyGTK
用于python GUI程序開發(fā)的GTK+庫(kù)。GTK就是用來實(shí)現(xiàn)GIMP和Gnome的庫(kù)。
PyQt
用于python的Qt開發(fā)庫(kù)。QT就是實(shí)現(xiàn)了KDE環(huán)境的那個(gè)庫(kù),由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個(gè)類和超過5750個(gè)的函數(shù)和方法。PyQt還支持一個(gè)叫qtext的模塊,它包含一個(gè)QScintilla庫(kù)。該庫(kù)是Scintillar編輯器類的Qt接口。
wxPython
GUI編程框架,熟悉MFC的人會(huì)非常喜歡,簡(jiǎn)直是同一架構(gòu)(對(duì)于初學(xué)者或者對(duì)設(shè)計(jì)要求不高的用戶來說,使用Boa Constructor可以方便迅速的進(jìn)行wxPython的開發(fā))
PIL
python提供強(qiáng)大的圖形處理的能力,并提供廣泛的圖形文件格式支持,該庫(kù)能進(jìn)行圖形格式的轉(zhuǎn)換、打印和顯示。還能進(jìn)行一些圖形效果的處理,如圖形的放大、縮小和旋轉(zhuǎn)等。是Python用戶進(jìn)行圖象處理的強(qiáng)有力工具。
Psyco
一個(gè)Python代碼加速度器,可使Python代碼的執(zhí)行速度提高到與編譯語言一樣的水平。
xmpppy
Jabber服務(wù)器采用開發(fā)的XMPP協(xié)議,Google Talk也是采用XMPP協(xié)議的IM系統(tǒng)。在Python中有一個(gè)xmpppy模塊支持該協(xié)議。也就是說,我們可以通過該模塊與Jabber服務(wù)器通信,是不是很Cool。
PyMedia
用于多媒體操作的python模塊。它提供了豐富而簡(jiǎn)單的接口用于多媒體處理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平臺(tái)下使用。
Pmw
Python megawidgets,Python超級(jí)GUI組件集,一個(gè)在python中利用Tkinter模塊構(gòu)建的高級(jí)GUI組件,每個(gè)Pmw都合并了一個(gè)或多個(gè)Tkinter組件,以實(shí)現(xiàn)更有用和更復(fù)雜的功能。
PyXML
用Python解析和處理XML文檔的工具包,包中的4DOM是完全相容于W3C DOM規(guī)范的。它包含以下內(nèi)容:
xmlproc: 一個(gè)符合規(guī)范的XML解析器。Expat: 一個(gè)快速的,非驗(yàn)證的XML解析器。還有其他和他同級(jí)別的還有 PyHtml PySGML。
PyGame
用于多媒體開發(fā)和游戲軟件開發(fā)的模塊。
PyOpenGL
模塊封裝了“OpenGL應(yīng)用程序編程接口”,通過該模塊python程序員可在程序中集成2D和3D的圖形。
NumPy、NumArray、SAGE
NumArray是Python的一個(gè)擴(kuò)展庫(kù),主要用于處理任意維數(shù)的固定類型數(shù)組,簡(jiǎn)單說就是一個(gè)矩陣庫(kù)。它的底層代碼使用C來編寫,所以速度的優(yōu)勢(shì)很明顯。SAGE是基于NumPy和其他幾個(gè)工具所整合成的數(shù)學(xué)軟件包,目標(biāo)是取代Magma, Maple, Mathematica和Matlab 這類工具。
MySQLdb
用于連接MySQL數(shù)據(jù)庫(kù)。還有用于zope的ZMySQLDA模塊,通過它就可在zope中連接mysql數(shù)據(jù)庫(kù)。
Sqlite3
用于連接sqlite數(shù)據(jù)庫(kù)。
Python-ldap
提供一組面向?qū)ο蟮腁PI,可方便地在python中訪問ldap目錄服務(wù),它基于OpenLDAP2.x。
smtplib
發(fā)送電子郵件。
ftplib
定義了FTP類和一些方法,用以進(jìn)行客戶端的ftp編程。如果想了解ftp協(xié)議的詳細(xì)內(nèi)容,請(qǐng)參考RFC959。
PyOpenCL
OpenCL的Python接口,通過該模塊可以使用GPU實(shí)現(xiàn)并行計(jì)算。
標(biāo)準(zhǔn)庫(kù)
Python擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)庫(kù)。Python語言的核心只包含數(shù)字、字符串、列表、字典、文件等常見類型和函數(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ù)類似。它們的功能無所不包,覆蓋科學(xué)計(jì)算、Web開發(fā)、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)多個(gè)領(lǐng)域,并且大多成熟而穩(wěn)定。第三方模塊可以使用Python或者C語言編寫。SWIG,SIP常用于將C語言編寫的程序庫(kù)轉(zhuǎn)化為Python模塊。Boost C++ Libraries包含了一組庫(kù),Boost.Python,使得以 Python 或 C++ 編寫的程序能互相調(diào)用。借助于擁有基于標(biāo)準(zhǔn)庫(kù)的大量工具、能夠使用低級(jí)語言如C和可以作為其他庫(kù)接口的C++,Python已成為一種強(qiáng)大的應(yīng)用于其他語言與工具之間的膠水語言。
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等
開發(fā)環(huán)境
●IDLE:Python內(nèi)置IDE (隨python安裝包提供)
●PyCharm[8] :詳見百度百科PyCharm,由著名的JetBrains公司開發(fā),帶有一整套可以幫助用戶在使用Python語言開發(fā)時(shí)提高其效率的工 具,比如調(diào)試、語法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制。此外,該IDE提供了一些高級(jí)功能,以用于支持Django框架下的專業(yè)Web開發(fā)。
●Komodo和Komodo Edit:后者是前者的免費(fèi)精簡(jiǎn)版
●Spyder:安裝Anaconda自帶的高級(jí)IDE
●PythonWin:ActivePython或pywin32均提供該IDE,僅適用于Windows
●SPE(Stani's Python Editor):功能較多的自由軟件,基于wxPython
●Ulipad:功能較全的自由軟件,基于wxPython;作者是中國(guó)Python高手limodou
●WingIDE:可能是功能最全的IDE,但不是自由軟件(教育用戶和開源用戶可以申請(qǐng)免費(fèi)key)
●Eric:基于PyQt的自由軟件,功能強(qiáng)大。全名是:The Eric Python IDE
●DrPython
●PyScripter:使用Delphi開發(fā)的輕量級(jí)的開源Python IDE, 支持Python2.6和3.0。
●PyPE:一個(gè)開源的跨平臺(tái)的PythonIDE。
●bpython: 類Unix操作系統(tǒng)下使用curses庫(kù)開發(fā)的輕量級(jí)的Python解釋器。語法提示功能。
●eclipse + pydev插件:方便調(diào)試程序
●emacs:自帶python支持,自動(dòng)補(bǔ)全、refactor等功能需要插件支持
●Vim: 最新7.3版編譯時(shí)可以加入python支持,提供python代碼自動(dòng)提示支持
●Visual Studio 2003 + VisualPython:僅適用Windows,已停止維護(hù),功能較差
●SlickEdit
●Visual Studio 2010 + Python Tools for Visual Studio
●TextMate
●Netbeans IDE
●Sublime
●ipython
另外,諸如Notepad++、EditPlus、UltraEdit等通用的程序員文本編輯器軟件也能對(duì)Python代碼編輯提供一定的支持,比如代碼自動(dòng)著色、注釋快捷鍵等,但是否夠得上集成開發(fā)環(huán)境的水平,尚有待評(píng)估。
Python是一門跨平臺(tái)的腳本語言,Python規(guī)定了一個(gè)Python語法規(guī)則,實(shí)現(xiàn)了Python語法的解釋程序就成為了Python的解釋器。
CPython(ClassicPython,也就是原始的Python實(shí)現(xiàn),需要區(qū)別于其他實(shí)現(xiàn)的時(shí)候才以CPython稱呼;或解作C語言實(shí)現(xiàn)的Python)。這是最常用的Python版本。
Jython(原名JPython;Java語言實(shí)現(xiàn)的Python,現(xiàn)已正式發(fā)布)。Jython可以直接調(diào)用Java的各種函數(shù)庫(kù)。
PyPy(使用Python語言寫的Python)
IronPython(面向.NET和ECMA CLI的Python實(shí)現(xiàn))。IronPython能夠直接調(diào)用.net平臺(tái)的各種函數(shù)庫(kù)。可以將Python程序編譯成.net程序。
ZhPy(周蟒)(支持使用繁/簡(jiǎn)中文語句編寫程序的Python語言)