Python

Python

編程語言
Python是一門開源免費、通用型的腳本編程語言,它上手簡單,功能強大,堅持「極簡主義」。Python類庫(模塊)極其豐富,這使得Python幾乎無所不能,不管是傳統的Web開發、PC軟件開發、Linux運維,還是當下火熱的機器學習、大數據分析、網絡爬蟲,Python都能勝任。[1]
  • 中文名:蟒蛇
  • 外文名:Python
  • 别名:蟒蛇語言,膠水語言
  • 英文名:Python
  • 發明人:Guido van Rossum
  • 設計者:Guido van Rossum
  • 創始時間:1991年
  • 榮譽:2010年度編程語言
  • 最新版本:3.3.1, 3.2.4, 2.7.5

基本概念

Python(KK英語發音:/'paɪθɑn/,DJ英語發音:/ˈpaiθən/)是一種面向對象、直譯式計算機程序設計語言,由Guido van Rossum于1989年底發明。第一個公開發行版發行于1991年。Python語法簡捷而清晰,具有豐富和強大的類庫。

它常被昵稱為膠水語言,它能夠很輕松的把用其他語言制作的各種模塊(尤其是C/C++)輕松地聯結在一起。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特别要求的部分,用更合适的語言改寫。比如3D遊戲中的圖形渲染模塊,速度要求非常高,就可以用C++重寫。

主要特點

    易于學習:Python有相對較少的關鍵字,結構簡單,和一個明确定義的語法,學習起來更加簡單。易于閱讀:Python代碼定義的更清晰。易于維護:Python的成功在于它的源代碼是相當容易維護的。一個廣泛的标準庫:Python的最大的優勢之一是豐富的庫,跨平台的,在UNIX,Windows和Macintosh兼容很好。互動模式:互動模式的支持,您可以從終端輸入執行代碼并獲得結果的語言,互動的測試和調試代碼片斷。可移植:基于其開放源代碼的特性,Python已經被移植(也就是使其工作)到許多平台。可擴展:如果你需要一段運行很快的關鍵代碼,或者是想要編寫一些不願開放的算法,你可以使用C或C++完成那部分程序,然後從你的Python程序中調用。數據庫:Python提供所有主要的商業數據庫的接口。GUI編程:Python支持GUI可以創建和移植到許多系統調用。可嵌入:可以将Python嵌入到C/C++程序,讓程序的用戶獲得"腳本化"的能力。

優點

Python是一種不受局限、跨平台的開源編程語言,它功能強大且簡單易學。因而得到了廣泛應用和支持。

ArcGIS9.0社區中引入了Python。此後,Python被視為可供地理處理用戶選擇的腳本語言并得以不斷發展。每個版本都進一步增強了Python體驗,從而為您提供更多的功能以及更豐富、更友好的Python體驗。

ESRI已将Python完全納入ArcGIS中,并将其視為可滿足我們用戶社區需求的語言。下面僅介紹Pytho的部分優勢:

1、易于學習,非常适合初學者,也特别适合專家使用

2、可伸縮程度高,适于大型項目或小型的一次性程序(稱為腳本)

3、可移植,跨平台

4、可嵌入(使ArcGIS可腳本化)

5、穩定成熟

6、用戶社區規模大

Python已延伸到ArcGIS中,成為了一種用于進行數據分析、數據轉換、數據管理和地圖自動化的語言,因而有助于提高工作效率。

發展曆程

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的設計哲學是“優雅”、“明确”、“簡單”。因此,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。”

執行

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的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并無警告的程序可以通過一個2to3的轉換工具無縫遷移到Python 3.0。

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

部分函數和語句的改變:最引人注意的改變是print語句沒有了,取而代之的是print函數。

字符串和字節:類似Java,str類表示一個Unicode字符串,代替了早期版本的unicode類。而一堆字節則用類似b“abc”的語法創建,用bytes類表示。

标準庫

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等。

開發環境

●IDLE:Python内置IDE(随python安裝包提供)

●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

●PyScripter:使用Delphi開發的輕量級的開源Python IDE,支持Python2.6和3.0。

●PyPE:一個開源的跨平台的PythonIDE。

●bpython:類Unix操作系統下使用curses庫開發的輕量級的Python解釋器。語法提示功能。

IDE軟件

●eclipse + pydev插件:方便調試程序

●emacs:自帶python支持,自動補全、refactor等功能需要插件支持

●Vim:最新7.3版編譯時可以加入python支持,提供python代碼自動提示支持

●Visual Studio 2003 + VisualPython:僅适用Windows,已停止維護,功能較差

●Visual Studio 2010 + Python Tools for Visual Studio

●TextMate

●Netbeans IDE

另外,諸如EditPlus、UltraEdit、PSPad等通用的程序員文本編輯器軟件也能對Python代碼編輯提供一定的支持,比如代碼自動着色、注釋快捷鍵等,但是否夠得上集成開發環境的水平,尚有待評估。

問題

1、運行速度慢

2、國内市場較小

3、中文資料匮乏(好的python中文資料屈指可數)。托社區的福,有幾本優秀的教材已經被翻譯了,但入門級教材多,高級内容還是隻能看英語版

4、構架選擇太多,不過這也從另一個側面說明,python比較優秀,吸引的人才多,項目也多

學習網站

Python官方文檔

PythonTab中文網

Python愛好者論壇

Pythoner在線互動交流平台

python菜鳥教程

python基礎教程

相關詞條

相關搜索

其它詞條