首先就要了解什么是Python
Python由荷蘭數(shù)學(xué)和計算機科學(xué)研究學(xué)會的Guido van Rossum 于1990 年代初設(shè)計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數(shù)據(jù)結(jié)構(gòu),還能簡單有效地面向?qū)ο缶幊獭ython語法和動態(tài)類型戳粒,以及解釋型語言的本質(zhì),使它成為多數(shù)平臺上寫腳本和快速開發(fā)應(yīng)用的編程語言虫啥,? 隨著版本的不斷更新和語言新功能的添加享郊,逐漸被用于獨立的、大型項目的開發(fā)孝鹊。?
Python解釋器易于擴展炊琉,可以使用C或C++(或者其他可以通過C調(diào)用的語言)擴展新的功能和數(shù)據(jù)類型。 Python 也可用于可定制化軟件中的擴展程序語言。Python豐富的標(biāo)準(zhǔn)庫苔咪,提供了適用于各個主要系統(tǒng)平臺的源碼或機器碼锰悼。?
優(yōu)點
簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣团赏。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身箕般。
易學(xué):Python極其容易上手,因為Python有極其簡單的說明文檔?舔清。
易讀丝里、易維護:風(fēng)格清晰劃一、強制縮進
用途廣泛
速度快:Python 的底層是用 C 語言寫的体谒,很多標(biāo)準(zhǔn)庫和第三方庫也都是用 C 寫的杯聚,運行速度非常快抒痒。
免費幌绍、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者可以自由地發(fā)布這個軟件的拷貝故响、閱讀它的源代碼傀广、對它做改動、把它的一部分用于新的自由軟件中彩届。FLOSS是基于一個團體分享知識的概念伪冰。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細節(jié)。
可移植性:由于它的開源本質(zhì)樟蠕,Python已經(jīng)被移植在許多平臺上(經(jīng)過改動使它能夠工作在不同平臺上)贮聂。這些平臺包括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平臺恨溜。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個你的計算機使用的語言(二進制代碼符衔,即0和1)。這個過程通過編譯器和不同的標(biāo)記糟袁、選項完成判族。
運行程序的時候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運行系吭。而Python語言寫的程序不需要編譯成二進制代碼五嫂。你可以直接從源代碼運行 程序。
在計算機內(nèi)部肯尺,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式沃缘,然后再把它翻譯成計算機使用的機器語言并運行。這使得使用Python更加簡單则吟。也使得Python程序更加易于移植槐臀。
面向?qū)ο?/a>:Python既支持面向過程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^程”的語言中氓仲,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的水慨。在“面向?qū)ο?/a>”的語言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的敬扛。
Python是完全面向?qū)ο?/a>的語言晰洒。函數(shù)、模塊啥箭、數(shù)字谍珊、字符串都是對象。并且完全支持繼承急侥、重載砌滞、派生、多繼承坏怪,有益于增強源代碼的復(fù)用性贝润。Python支持重載運算符和動態(tài)類型。相對于Lisp這種傳統(tǒng)的函數(shù)式編程語言铝宵,Python對函數(shù)式設(shè)計只提供了有限的支持打掘。有兩個標(biāo)準(zhǔn)庫(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗的函數(shù)式程序設(shè)計工具。
可擴展性、可擴充性:如果需要一段關(guān)鍵代碼運行得更快或者希望某些算法不公開胧卤,可以部分程序用C或C++編寫唯绍,然后在Python程序中使用它們。
Python本身被設(shè)計為可擴充的枝誊。并非所有的特性和功能都集成到語言核心况芒。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言叶撒、C++绝骚、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內(nèi)祠够。因此压汪,很多人還把Python作為一種“膠水語言”(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝古瓤。在Google內(nèi)部的很多項目止剖,例如Google Engine使用C++編寫性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊落君〈┫悖《Python技術(shù)手冊》的作者馬特利(Alex Martelli)說:“這很難講,不過绎速,2004 年皮获,Python 已在Google?內(nèi)部使用,Google 召募許多 Python 高手纹冤,但在這之前就已決定使用Python洒宝,他們的目的是 Python where we can, C++ where we must,在操控硬件的場合使用C++萌京,在快速開發(fā)時候使用 Python雁歌。”
可嵌入性:可以把Python嵌入C/C++程序知残,從而向程序用戶提供腳本功能靠瞎。
豐富的庫:Python標(biāo)準(zhǔn)庫確實很龐大。它可以幫助處理各種工作橡庞,包括正則表達式较坛、文檔生成印蔗、單元測試扒最、線程、數(shù)據(jù)庫华嘹、網(wǎng)頁瀏覽器吧趣、CGI、FTP、電子郵件强挫、XML岔霸、XML-RPC、HTML俯渤、WAV文件呆细、密碼系統(tǒng)、GUI(圖形用戶界面)八匠、Tk和其他與系統(tǒng)有關(guān)的操作絮爷。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外梨树,還有許多其他高質(zhì)量的庫坑夯,如wxPython、Twisted和Python圖像庫等等抡四。
規(guī)范的代碼:Python采用強制縮進的方式使得代碼具有較好可讀性柜蜈。而Python語言寫的程序不需要編譯成二進制代碼。Python的作者設(shè)計限制性很強的語法指巡,使得不好的編程習(xí)慣(例如if語句的下一行不向右縮進)都不能通過編譯淑履。其中很重要的一項就是Python的縮進規(guī)則。一個和其他大多數(shù)語言(如C)的區(qū)別就是厌处,一個模塊的界限鳖谈,完全是由每行的首字符在這一行的位置來決定(而C語言是用一對花括號{}來明確的定出模塊的邊界,與字符的位置毫無關(guān)系)阔涉。通過強制程序員們縮進(包括if缆娃,for和函數(shù)定義等所有需要使用模塊的地方),Python確實使得程序更加清晰和美觀瑰排。
高級動態(tài)編程:雖然Python可能被粗略地分類為“腳本語言”(script language)贯要,但實際上一些大規(guī)模軟件開發(fā)計劃例如Zope、Mnet及BitTorrent椭住,Google也廣泛地使用它崇渗。Python的支持者較喜歡稱它為一種高級動態(tài)編程語言,原因是“腳本語言”泛指僅作簡單程序設(shè)計任務(wù)的語言京郑,如shellscript宅广、VBScript等只能處理簡單任務(wù)的編程語言,并不能與Python相提并論些举。
做科學(xué)計算優(yōu)點多:說起科學(xué)計算跟狱,首先會被提到的可能是MATLAB。除了MATLAB的一些專業(yè)性很強的工具箱還無法被替代之外户魏,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴展庫驶臊。和MATLAB相比挪挤,用Python做科學(xué)計算有如下優(yōu)點:
● 首先,MATLAB是一款商用軟件关翎,并且價格不菲扛门。而Python完全免費,眾多開源的科學(xué)計算庫都提供了Python的調(diào)用接口纵寝。用戶可以在任何計算機上免費安裝Python及其絕大多數(shù)擴展庫论寨。
● 其次,與MATLAB相比爽茴,Python是一門更易學(xué)政基、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計語言。它能讓用戶編寫出更易讀闹啦、易維護的代碼沮明。
● 最后,MATLAB主要專注于工程和科學(xué)計算窍奋。然而即使在計算領(lǐng)域荐健,也經(jīng)常會遇到文件管理、界面設(shè)計琳袄、網(wǎng)絡(luò)通信等各種需求江场。而Python有著豐富的擴展庫,可以輕易完成各種高級任務(wù)窖逗,開發(fā)者可以用Python實現(xiàn)完整應(yīng)用程序所需的各種功能址否。
缺點
單行語句和命令行輸出問題:很多時候不能將程序連寫成一行,如import sys;for i in sys.path:print i碎紊。而perl和awk就無此限制佑附,可以較為方便的在shell下完成簡單程序,不需要如Python一樣仗考,必須將程序?qū)懭胍粋€.py文件音同。
給初學(xué)者帶來困惑:獨特的語法,這也許不應(yīng)該被稱為局限秃嗜,但是它用縮進來區(qū)分語句關(guān)系的方式還是給很多初學(xué)者帶來了困惑权均。即便是很有經(jīng)驗的Python程序員,也可能陷入陷阱當(dāng)中锅锨。
運行速度慢:這里是指與C和C++相比叽赊。Python開發(fā)人員盡量避開不成熟或者不重要的優(yōu)化。一些針對非重要部位的加快運行速度的補丁通常不會被合并到Python內(nèi)必搞。所以很多人認(rèn)為Python很慢必指。不過,根據(jù)二八定律顾画,大多數(shù)程序?qū)λ俣纫蟛桓呷〗佟T谀承\行速度要求很高的情況,Python設(shè)計師傾向于使用JIT技術(shù)研侣,或者用使用C/C++語言改寫這部分程序谱邪。可用的JIT技術(shù)是PyPy庶诡。
和其他語言區(qū)別
對于一個特定的問題惦银,只要有一種最好的方法來解決
這在由Tim Peters寫的Python格言(稱為The Zen of Python)里面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高級動態(tài)語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。
Python的設(shè)計哲學(xué)是“優(yōu)雅”末誓、“明確”扯俱、“簡單”。因此喇澡,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發(fā)者中通常是難以忍受的迅栅。Python開發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來做一件事”晴玖。在設(shè)計Python語言時读存,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的語法呕屎,而選擇明確的沒有或者很少有歧義的語法让簿。由于這種設(shè)計觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性秀睛,并且能夠支撐大規(guī)模的軟件開發(fā)尔当。這些準(zhǔn)則被稱為Python格言。在Python解釋器內(nèi)運行import this可以獲得完整的列表蹂安。
更高級的Virtual Machine
Python在執(zhí)行時椭迎,首先會將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機)來執(zhí)行這些編譯好的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編譯出的字節(jié)碼文件惋砂,通常是.pyc格式。除此之外绳锅,Python還可以以交互模式運行西饵,比如主流操作系統(tǒng)Unix/Linux、Mac鳞芙、Windows都可以直接在命令模式下直接運行Python交互環(huán)境眷柔。直接下達操作指令即可實現(xiàn)交互操作。
循序漸進原朝,由淺入深只要能堅持驯嘱,跟著老師的思路走
就可以學(xué)會。