python

    Python(英語發音:/ˈpaɪθən/), 是一種面向對象、解釋型計算機程序設計語言,由Guido van Rossum於1989年末發明,第一個公開發行版發行於1991年,Python 源代碼一樣遵循 GPL(GNU General Public License)協議 。Python語法簡潔而清晰,具備豐富和強大的類庫。它常被暱稱爲膠水語言,可以把用其餘語言製做的各類模塊(尤爲是C/C++)很輕鬆地聯結在一塊兒。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),而後對其中有特別要求的部分,用更合適的語言改寫,好比3D遊戲中的圖形渲染模塊,性能要求特別高,就能夠用C/C++重寫,然後封裝爲Python能夠調用的擴展類庫。須要注意的是在您使用擴展類庫時可能須要考慮平臺問題,某些可能不提供跨平臺的實現。html

發展歷程python

    自從20世紀90年代初Python語言誕生至今,它逐漸被普遍應用於處理系統管理任務和Web編程。
Python的創始人爲Guido van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido爲了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作爲ABC 語言的一種繼承。之因此選中Python(大蟒蛇的意思)做爲程序的名字,是由於他是一個叫Monty Python的喜劇團體的愛好者。
    ABC是由Guido參加設計的一種教學語言。就Guido本人看來,ABC 這種語言很是優美和強大,是專門爲非專業程序員設計的。可是ABC語言並無成功,究其緣由,Guido 認爲是非開放形成的。Guido 決心在Python 中避免這一錯誤。同時,他還想實如今ABC 中閃現過但不曾實現的東西。
    就這樣,Python在Guido手中誕生了。能夠說,Python是從ABC發展起來,主要受到了Modula-3(另外一種至關優美且強大的語言,爲小型團體所設計的)的影響。而且結合了Unix shell和C的習慣。
Python[2] 已經成爲最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評爲2010年度語言。自從2004年之後,python的使用率是呈線性增加[3] 。
因爲Python語言的簡潔、易讀以及可擴展性,在國外用Python作科學計算的研究機構日益增多,一些知名大學已經採用Python教授程序設計課程。例如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用Python語言講授。衆多開源的科學計算軟件包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴展庫就更多了,例如以下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別爲Python提供了快速數組處理、數值運算以及繪圖功能。所以Python語言及其衆多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、製做圖表,甚至開發科學計算應用程序。
    提及科學計算,首先會被提到的多是MATLAB。然而除了MATLAB的一些專業性很強的工具箱還沒法替代以外,MATLAB的大部分經常使用功能均可以在Python世界中找到相應的擴展庫。和MATLAB相比,用Python作科學計算有以下優勢:
    ● 首先,MATLAB是一款商用軟件,而且價格不菲。而Python徹底免費,衆多開源的科學計算庫都提供了Python的調用接口。用戶能夠在任何計算機上免費安裝Python及其絕大多數擴展庫。
    ● 其次,與MATLAB相比,Python是一門更易學、更嚴謹的程序設計語言。它能讓用戶編寫出更易讀、易維護的代碼。
    ● 最後,MATLAB主要專一於工程和科學計算。然而即便在計算領域,也常常會遇到文件管理、界面設計、網絡通訊等各類需求。而Python有着豐富的擴展庫,能夠輕易完成各類高級任務,開發者能夠用Python實現完整應用程序所需的各類功能。mysql

風格linux

    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確實使得程序更加清晰和美觀。android

設計定位程序員

    Python的設計哲學是「優雅」、「明確」、「簡單」。所以,Perl語言中「老是有多種方法來作同一件事」的理念在Python開發者中一般是難以忍受的。Python開發者的哲學是「用一種方法,最好是隻有一種方法來作一件事」。在設計Python語言時,若是面臨多種選擇,Python開發者通常會拒絕花俏的語法,而選擇明確的沒有或者不多有歧義的語法。因爲這種設計觀念的差別,Python源代碼一般被認爲比Perl具有更好的可讀性,而且可以支撐大規模的軟件開發。這些準則被稱爲Python格言。在Python解釋器內運行import this能夠得到完整的列表。
    Python開發人員儘可能避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁一般不會被合併到Python內。因此不少人認爲Python很慢。不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的狀況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。
    Python是徹底面向對象的語言。函數、模塊、數字、字符串都是對象。而且徹底支持繼承、重載、派生、多繼承,有益於加強源代碼的複用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標準庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
    雖然Python可能被粗略地分類爲「腳本語言」(script language),但實際上一些大規模軟件開發計劃例如Zope、Mnet及BitTorrent,Google也普遍地使用它。Python的支持者較喜歡稱它爲一種高級動態編程語言,緣由是「腳本語言」泛指僅做簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。
    Python自己被設計爲可擴充的。並不是全部的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員可以輕鬆地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器自己也能夠被集成到其它須要腳本語言的程序內。所以,不少人還把Python做爲一種「膠水語言」(glue language)使用。使用Python將其餘語言編寫的程序進行集成和封裝。在Google內部的不少項目,例如Google Engine使用C++編寫性能要求極高的部分,而後用Python或Java/Go調用相應的模塊。《Python技術手冊》的做者馬特利(Alex Martelli)說:「這很難講,不過,2004 年,Python 已在Google 內部使用,Google 召募許多 Python 高手,但在這以前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場合使用 C++,在快速開發時候使用 Python。」web

CGI正則表達式

    CGI 目前由NCSA維護,NCSA定義CGI以下:
    CGI(Common Gateway Interface),通用網關接口,它是一段程序,運行在服務器上如:HTTP服務器,提供同客戶端HTML頁面的接口。
    CGI程序能夠是Python腳本、Perl腳本、Shell腳本、C或者C++程序等。
服務器算法

    在你進行CGI編程前,確保您的Web服務器支持CGI及已經配置了CGI的處理程序。
    全部的HTTP服務器執行CGI程序都保存在一個預先配置的目錄。這個目錄被稱爲CGI目錄,並按照慣例,它被命名爲/var/www/cgi-bin目錄。
    CGI文件的擴展名爲.cgi,python也可使用.py擴展名。
    默認狀況下,Linux服務器配置運行的cgi-bin目錄中爲/var/www。
    若是想指定的其餘運行CGI腳本的目錄,能夠修改httpd.conf配置文件,以下所示:sql

1
2
3
4
5
6
7
8
9
< 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建立第一個CGI程序,文件名爲hello.py,文件位於/var/www/cgi-bin目錄中,內容以下,修改文件的權限爲755:[2]  
1
2
3
4
5
6
7
8
9
10
#!/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>" )
    以上程序在瀏覽器訪問顯示結果以下:
1
Hello World! This  is  my first CGI program
    這個的hello.py腳本是一個簡單的Python腳本,腳本第一的輸出內容"Content-type:text/html\r\n\r\n"發送到瀏覽器並告知瀏覽器顯示的內容類型爲"text/html"。

環境變量

    全部的CGI程序都接收如下的環境變量,這些變量在CGI程序中發揮了重要的做用:[2]  
變量名
描述
CONTENT_TYPE
這個環境變量的值指示所傳遞來的信息的MIME類型。目前,環境變量CONTENT_TYPE通常都是:application/x-www-form-urlencoded,他表示數據來自於HTML表單。
CONTENT_LENGTH
若是服務器與CGI程序信息的傳遞方式是POST,這個環境變量即便從標準輸入STDIN中能夠讀到的有效數據的字節數。這個環境變量在讀取所輸入的數據時必須使用。
HTTP_COOKIE
客戶機內的 COOKIE 內容。
HTTP_USER_AGENT
提供包含了版本數或其餘專有數據的客戶瀏覽器信息。
PATH_INFO
這個環境變量的值表示緊接在CGI程序名以後的其餘路徑信息。它經常做爲CGI程序的參數出現。
QUERY_STRING
若是服務器與CGI程序信息的傳遞方式是GET,這個環境變量的值即便所傳遞的信息。這個信息經跟在CGI程序名的後面,二者中間用一個問號'?'分隔。
REMOTE_ADDR
這個環境變量的值是發送請求的客戶機的IP地址,例如上面的192.168.1.67。這個值老是存在的。並且它是Web客戶機須要提供給Web服務器的惟一標識,能夠在CGI程序中用它來區分不一樣的Web客戶機。
REMOTE_HOST
這個環境變量的值包含發送CGI請求的客戶機的主機名。若是不支持你想查詢,則無需定義此環境變量。
REQUEST_METHOD
提供腳本被調用的方法。對於使用 HTTP/1.0 協議的腳本,僅 GET 和 POST 有意義。
SCRIPT_FILENAME
CGI腳本的完整路徑
SCRIPT_NAME
CGI腳本的的名稱
SERVER_NAME
這是你的 WEB 服務器的主機名、別名或IP地址。
SERVER_SOFTWARE
這個環境變量的值包含了調用CGI程序的HTTP服務器的名稱和版本號。例如,上面的值爲Apache/2.2.14(Unix)
    如下是一個簡單的CGI腳本輸出CGI的環境變量:
1
2
3
4
5
6
#!/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])

執行

    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格式。
    除此以外,Python還能夠以交互模式運行,好比主流操做系統Unix/Linux、Mac、window均可以直接在命令模式下直接運行Python交互環境。直接下達操做指令便可實現交互操做。

基本語法

    Python的設計目標之一是讓代碼具有高度的可閱讀性。它設計時儘可能使用其它語言常用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其餘的靜態語言如C、Pascal那樣須要重複書寫聲明語句,也不像它們的語法那樣常常有特殊狀況和驚喜。

縮進

    Python開發者有意讓違反了縮進規則的程序不能經過編譯,以此來強制程序員養成良好的編程習慣。而且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。增長縮進表示語句塊的開始,而減小縮進則表示語句塊的退出。縮進成爲了語法的一部分。例如if語句:
1
2
3
4
if  age< 21 :
     print ( "你不能買酒。" )
     print ( "不過你能買口香糖。" )
print ( "這句話處於if語句塊的外面。" )
    注:上述例子爲python 3.0版本的代碼
    根據PEP的規定,必須使用 4個空格來表示每級縮進(不清楚4個空格的規定如何,在實際編寫中能夠自定義空格數,可是要知足每級縮進間空格數相等)。使用Tab字符和其它數目的空格雖然均可以編譯經過,但不符合編碼規範。支持Tab字符和其它數目的空格僅僅是爲兼容很舊的的Python程序和某些有問題的編輯程序。

控制語句

    if語句,當條件成立時運行語句塊。常常與else, elif(至關於else if) 配合使用。
    for語句,遍歷列表、字符串、字典、集合等 迭代器,依次處理迭代器中的每一個元素。
    while語句,當條件爲真時,循環運行語句塊。
    try語句。與except,finally配合使用處理在程序運行中出現的異常狀況。
    class語句。用於定義 類型
    def語句。用於定義函數和類型的方法。
    pass語句。表示此行爲空,不運行任何操做。
    assert語句。用於程序調適階段時測試運行條件是否知足。
    with語句。Python2.6之後定義的語法,在一個場景中運行語句塊。好比,運行語句塊前加密,而後在語句塊運行退出後解密。
    yield語句。在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本之後。這個語句變成一個運算符。
    raise語句。製造一個錯誤。
    import語句。導入一個模塊或包。
    from import語句。從包導入模塊或從模塊導入某個對象。
    import as語句。將導入的對象賦值給一個變量。
    in語句。判斷一個對象是否在一個字符串/列表/元組裏。

表達式

    Python的表達式寫法與C/C++相似。只是在某些寫法有所差異。
    主要的算術運算符與C/C++相似。+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取模。>>, <<表示右移和左移。&, |, ^表示二進制的AND, OR, XOR運算。>, <, ==, !=, <=, >=用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。在這些運算符裏面,~, |, ^, &, <<, >>必須應用於整數。
    Python使用and, or, not表示邏輯運算。
    is, is not用於比較兩個變量是不是同一個對象。in, not in用於判斷一個對象是否屬於另一個對象。
    Python支持「列表推導式」(list comprehension),好比計算0-9的平方和:
    >>> sum(x * x for x in range(10))
   285
    Python使用lambda表示匿名函數。匿名函數體只能是表達式。好比:
    >>> add=lambda x, y : x + y
    >>> add(3,2)
    5
    Python使用y if cond else x表示條件表達式。意思是當cond爲真時,表達式的值爲y,不然表達式的值爲x。至關於C++和Java裏的cond?y:x。
    Python區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。能夠改變list中的元素,而不能改變tuple。在某些狀況下,tuple的括號能夠省略。tuple對於賦值語句有特殊的處理。所以,能夠同時賦值給多個變量,好比:
    >>> x, y=1,2#同時給x,y賦值,最終結果:x=1, y=2
    特別地,可使用如下這種形式來交換兩個變量的值:
    >>> x, y=y, x #最終結果:y=1, x=2
    Python使用'(單引號)和"(雙引號)來表示字符串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不同,兩種符號做用相同。通常地,若是字符串中出現了雙引號,就使用單引號來表示字符串;反之則使用雙引號。若是都沒有出現,就依我的喜愛選擇。出如今字符串中的\(反斜槓)被解釋爲特殊字符,好比\n表示換行符。表達式前加r指示Python不解釋字符串中出現的\。這種寫法一般用於編寫正則表達式或者Windows文件路徑。
Python支持列表切割(list slices),能夠取得完整列表的一部分。支持切割操做的類型有str, bytes, list, tuple等。它的語法是...[left:right]或者...[left:right:stride]。假定nums變量的值是[1, 3, 5, 7, 8, 13, 20],那麼下面幾個語句爲真:
    nums[2:5] == [5, 7, 8] 從下標爲2的元素切割到下標爲5的元素,但不包含下標爲5的元素。
    nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最後一個元素。
    nums[:-3] == [1, 3, 5, 7] 從最開始的元素一直切割到倒數第3個元素。
    nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回全部元素。改變新的列表不會影響到nums。
    nums[1:5:2] == [3, 7] 從下標爲1的元素切割到下標爲5的元素但不包含下標爲5的元素,且步長爲2。

函數

    Python的函數支持遞歸、默認參數值、可變參數,但不支持函數重載。爲了加強代碼的可讀性,能夠在函數後書寫「文檔字符串」(Documentation Strings,或者簡稱docstrings),用於解釋函數的做用、參數的類型與意義、返回值類型與取值範圍等。可使用內置函數help()打印出函數的使用幫助。好比:
    >>> 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.

對象的方法

    對象的方法是指綁定到對象的函數。調用對象方法的語法是instance.method(arguments)。它等價於調用Class.method(instance, arguments)。當定義對象方法時,必須顯式地定義第一個參數,通常該參數名都使用self,用於訪問對象的內部數據。這裏的self至關於C++, Java裏面的this變量,可是咱們還可使用任何其它合法的參數名,好比this 和 mine 等,self與C++,Java裏面的this不徹底同樣,它能夠被看做是一個習慣性的用法,咱們傳入任何其它的合法名稱都行,好比:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class  Fish:
     def  eat( self ,food):
         if  food  is  not  None :
         self .hungry = False
 
class  User:
     def__init__(myself,name):
         myself.name = name
 
#構造Fish的實例:
f = Fish()
#如下兩種調用形式是等價的:
Fish.eat(f, "earthworm" )
f.eat( "earthworm" )
u = User( 'username' )
print (u.name)
    Python認識一些以「__」開始並以「__」結束的特殊方法名,它們用於實現運算符重載和實現多種特殊功能。

類型

    Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才作出檢查。因此操做對象時可能會拋出異常。不過,雖然Python採用動態類型系統,它同時也是強類型的。Python禁止沒有明肯定義的操做,好比數字加字符串。
    與其它面嚮對象語言同樣,Python容許程序員定義類型。構造一個對象只須要像函數同樣調用類型便可,好比,對於前面定義的Fish類型,使用Fish()。類型自己也是特殊類型type的對象(type類型自己也是type對象),這種特殊的設計容許對類型進行反射編程。
    Python內置豐富的數據類型。與Java、C++相比,這些數據類型有效地減小代碼的長度。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x):
類型
描述
例子
備註
str
一個由字符組成的不可更改的有串行。
'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
在Python 3.x裏,字符串由Unicode字符組成
bytes
一個由字節組成的不可更改的有串行。
b'Some ASCII'
b"Some ASCII"
 
list
能夠包含多種類型的可改變的有串行
[4.0, 'string', True]
 
tuple
能夠包含多種類型的不可改變的有串行
(4.0, 'string', True)
 
set, frozenset
與數學中集合的概念相似。無序的、每一個元素惟一。
{4.0, 'string', True}
frozenset([4.0, 'string', True])
 
dict
一個可改變的由鍵值對組成的無串行。
{'key1': 1.0, 3: False}
 
int
精度不限的整數
42
 
float
浮點數。精度與系統相關。
3.1415927
 
complex
複數
3+2.7j
 
bool
邏輯值。只有兩個值:真、假
True
False
 
    除了各類數據類型,Python語言還用類型來表示函數、模塊、類型自己、對象的方法、編譯後的Python代碼、運行時信息等等。所以,Python具有很強的動態性。

數學運算

    Python使用與C、Java相似的運算符,支持整數與浮點數的數學運算。同時還支持複數運算與無窮位數(實際受限於計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數處於math和cmath模塊內。前者用於實數運算,然後者用於複數運算。使用時須要先導入它們,好比:
    >>> import math
    >>> print(math.sin(math.pi/2))
    1.0
    fractions模塊用於支持分數運算;decimal模塊用於支持高精度的浮點數運算。
    Python定義求餘運行a % b的值處於開區間[0, b)內,若是b是負數,開區間變爲(b, 0]。這是一個很常見的定義方式。不過其實它依賴於整除的定義。爲了讓方程式:b * (a // b) + a % b = a恆真,整除運行須要向負無窮小方向取值。好比7 // 3的結果是2,而(-7) // 3的結果倒是-3。這個算法與其它不少編程語言不同,須要注意,它們的整除運算會向0的方向取值。
Python容許像數學的經常使用寫法那樣連着寫兩個比較運行符。好比a < b < c與a < b and b < c等價。C++的結果與Python不同,首先它會先計算a < b,根據二者的大小得到0或者1兩個值之一,而後再與c進行比較。

7特色

優勢

簡單:Python是一種表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣。它使你可以專一於解決問題而不是去搞明白語言自己。
易學:Python極其容易上手,由於Python有極其簡單的說明文檔[4] 。
速度快:Python 的底層是用 C 語言寫的,不少標準庫和第三方庫也都是用 C 寫的,運行速度很是快。[2]
免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者能夠自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它作改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
可移植性:因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、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平臺。
解釋性:一個用編譯性語言好比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語言寫的程序不須要編譯成二進制代碼。

缺點

單行語句和命令行輸出問題:不少時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,能夠較爲方便的在shell下完成簡單程序,不須要如Python同樣,必須將程序寫入一個.py文件。
獨特的語法
這也許不該該被稱爲侷限,可是它用縮進來區分語句關係的方式仍是給不少初學者帶來了困惑。即使是頗有經驗的Python程序員,也可能陷入陷阱當中。最多見的狀況是tab和空格的混用會致使錯誤,而這是用肉眼沒法分別的。
運行速度慢:這裏是指與C和C++相比。

8應用

系統編程:提供API(Application Programming Interface應用程序編程接口),能方便進行系統維護和管理,Linux下標誌性語言之一,是不少系統管理員理想的編程工具[5] 。
圖形處理:有PIL、Tkinter等圖形庫支持,能方便進行圖形處理。
數學處理:NumPy擴展提供大量與許多標準數學庫的接口。
文本處理:python提供的re模塊能支持正則表達式,還提供SGML,XML分析模塊,許多程序員利用python進行XML程序的開發。
數據庫編程:程序員可經過遵循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模塊可用於編寫遊戲軟件。
pymo引擎:PYMO全稱爲python memories off,是一款運行於Symbian S60V3,Symbian3,S60V5, Symbian3, Android系統上的AVG遊戲引擎。因其基於python2.0平臺開發,而且適用於建立秋之回憶(memories off)風格的AVG遊戲,故命名爲PYMO。
黑客編程:python有一個hack的庫,內置了你熟悉的或不熟悉的函數,可是缺乏成就感。
用Python寫簡單爬蟲
首先,要經過urllib2這個Module得到對應的HTML源碼。

1
2
3
4
import  urllib2   #調用urllib2  
url = 'http://www.baidu.com/s?wd=cloga'  #把等號右邊的網址賦值給url
html = urllib2.urlopen(url).read()    #html隨意取名 等號後面的動做是打開源代碼頁面,並閱讀
print  html  #打印
經過上面這三句就能夠將URL的源碼存在content變量中,其類型爲字符型。
接下來是要從這堆HTML源碼中提取咱們須要的內容。用Chrome查看一下對應的內容的代碼(也能夠用Firefox的Firebug)。
能夠看到url的信息存儲在span標籤中,要獲取其中的信息能夠用正則式。

9工具功能

Tkinter
Python默認的圖形界面接口。Tkinter是一個和Tk接口的Python模塊,Tkinter庫提供了對Tk API的接口,它屬於Tcl/Tk的GUI工具組。
用於python GUI程序開發的GTK+庫。GTK就是用來實現GIMP和Gnome的庫。
用於python的Qt開發庫。QT就是實現了KDE環境的那個庫,由一系列的模塊組成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300個類和超過5750個的函數和方法。PyQt還支持一個叫qtext的模塊,它包含一個QScintilla庫。該庫是Scintillar編輯器類的Qt接口。
GUI編程框架,熟悉MFC的人會很是喜歡,簡直是同一架構(對於初學者或者對設計要求不高的用戶來講,使用Boa Constructor能夠方便迅速的進行wxPython的開發)
PIL
python提供強大的圖形處理的能力,並提供普遍的圖形文件格式支持,該庫能進行圖形格式的轉換、打印和顯示。還能進行一些圖形效果的處理,如圖形的放大、縮小和旋轉等。是Python用戶進行圖象處理的強有力工具。
Psyco
一個Python代碼加速度器,可以使Python代碼的執行速度提升到與編譯語言同樣的水平。
xmpppy
Jabber服務器採用開發的XMPP協議,Google Talk也是採用XMPP協議的IM系統。在Python中有一個xmpppy模塊支持該協議。也就是說,咱們能夠經過該模塊與Jabber服務器通訊,是否是很Cool。
PyMedia
用於多媒體操做的python模塊。它提供了豐富而簡單的接口用於多媒體處理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平臺下使用。
Pmw
Python megawidgets,Python超級GUI組件集,一個在python中利用Tkinter模塊構建的高級GUI組件,每一個Pmw都合併了一個或多個Tkinter組件,以實現更有用和更復雜的功能。
PyXML
用Python解析和處理XML文檔的工具包,包中的4DOM是徹底相容於W3C DOM規範的。它包含如下內容:
xmlproc: 一個符合規範的XML解析器。Expat: 一個快速的,非驗證的XML解析器。還有其餘和他同級別的還有 PyHtml PySGML。
用於多媒體開發和遊戲軟件開發的模塊。
PyOpenGL
模塊封裝了「OpenGL應用程序編程接口」,經過該模塊python程序員可在程序中集成2D和3D的圖形。
NumPy、NumArray、 SAGE
NumArray是Python的一個擴展庫,主要用於處理任意維數的固定類型數組,簡單說就是一個矩陣庫。它的底層代碼使用C來編寫,因此速度的優點很明顯。SAGE是基於NumPy和其餘幾個工具所整合成的數學軟件包,目標是取代Magma, Maple, Mathematica和Matlab 這類工具。
用於鏈接MySQL數據庫。還有用於zope的ZMySQLDA模塊,經過它就可在zope中鏈接mysql數據庫。
S qlite3
用於鏈接sqlite數據庫。
  
Python-ldap
提供一組面向對象的API,可方便地在python中訪問ldap目錄服務,它基於OpenLDAP2.x。
smtplib
發送電子郵件。
ftplib
定義了FTP類和一些方法,用以進行客戶端的ftp編程。若是想了解ftp協議的詳細內容,請參考RFC959。
PyOpenCL
OpenCL的Python接口,經過該模塊可使用GPU實現並行計算。

10標準庫

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等

11開發環境

●IDLE:Python內置IDE (隨python安裝包提供)
●PyCharm[6] :詳見百度百科PyCharm,由著名的JetBrains公司開發,帶有一整套能夠幫助用戶在使用Python語言開發時提升其效率的工 具,好比調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以用於支持Django框架下的專業Web開發。
●Komodo和Komodo Edit:後者是前者的免費精簡版
●PythonWin:ActivePython或pywin32均提供該IDE,僅適用於Windows
●SPE(Stani's Python Editor):功能較多的自由軟件,基於wxPython
●Ulipad:功能較全的自由軟件,基於wxPython;做者是中國Python高手limodou
●WingIDE:多是功能最全的IDE,但不是自由軟件(教育用戶和開源用戶能夠申請免費key)
●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
●Sublime
另外,諸如EditPlus、UltraEdit、PSPad等通用的程序員文本編輯器軟件也能對Python代碼編輯提供必定的支持,好比代碼自動着色、註釋快捷鍵等,可是否夠得上集成開發環境的水平,尚有待評估。

12解釋器

    Python是一門跨平臺的腳本語言,Python規定了一個Python語法規則,實現了Python語法的解釋程序就成爲了Python的解釋器。
    CPython(ClassicPython,也就是原始的Python實現,須要區別於其餘實現的時候才以CPython稱呼;或解做C語言實現的Python)。這是最經常使用的Python版本。
    Jython(原名JPython;Java語言實現的Python,現已正式發佈)。Jython能夠直接調用Java的各類函數庫。
    PyPy(使用Python語言寫的Python)
    IronPython(面向.NET和ECMA CLI的Python實現)。IronPython可以直接調用.net平臺的各類函數庫。能夠將Python程序編譯成.net程序。
    ZhPy(周蟒)(支持使用繁/簡中文語句編寫程序的Python語言)

13著名應用

    Pylons-Web應用框架
    Zope- 應用服務器
    Plone- 內容管理系統
    Django- 鼓勵快速開發的Web應用框架
    Uliweb- 國人開發的輕量級Web框架
    TurboGears- 另外一個Web應用快速開發框架
    Twisted--Python的網絡應用程序框架
    Python Wikipedia Robot Framework- MediaWiki的機器人程序
    MoinMoinWiki- Python寫成的Wiki程序
    flask- Python 微Web框架
    tornado- 非阻塞式服務器
    Webpy- Python 微Web框架
    Bottle- Python 微Web框架
    EVE- 網絡遊戲EVE大量使用Python進行開發
    Reddit - 社交分享網站
    Dropbox - 文件分享服務
    Pylons - Web應用框架
    TurboGears - 另外一個Web應用快速開發框架
    Fabric - 用於管理成百上千臺Linux主機的程序庫
    Trac - 使用Python編寫的BUG管理系統
    Mailman - 使用Python編寫的郵件列表軟件
    Mezzanine - 基於Django編寫的內容管理系統
    Blender - 以C與Python開發的開源3D繪圖軟件

14學習網站

Python官方文檔[7]  
Python學習資源
PythonTab中文網[8]  
Python愛好者論壇[9]  
Pythoner在線互動交流平臺[10]  
Python在線資源大全
Python免費教學視頻
Python在線運行及高手進階資料[11]  
簡明Python教程[12]  
一人一python[11]  
Python 學習資源
相關文章
相關標籤/搜索