第一章 概述
1. 歷史故事
? Python的創(chuàng)始人為吉多·范羅蘇姆(Guido van Rossum)尿扯,當時他在阿姆斯特丹的CWI工作。1989年的圣誕節(jié)期間轴猎,吉多·范羅蘇姆為了在打發(fā)時間日月,決心開發(fā)一個新的腳本解釋編程掩幢,作為ABC語言的一種繼承,擔負同Amoeba操作系統(tǒng)(英語:Amoeba (operating system))的交互和異常處理寞忿。之所以選中Python作為編程的名字驰唬,是因為他是BBC電視劇——蒙提·派森的飛行馬戲團(Monty Python's Flying Circus)的愛好者。
? Python是為了替代使用Unix shell和C語言進行系統(tǒng)管理而從ABC語言發(fā)展起來罐脊,而它的模塊系統(tǒng)主要受到了Modula-3的影響定嗓,它還結(jié)合了C語言的最少爭議特征。就范羅蘇姆本人看來萍桌,ABC這種語言非常優(yōu)美和強大宵溅,是專門為非專業(yè)程序員設計的。但是ABC語言并沒有成功上炎,究其原因恃逻,他認為是非開放造成的。范羅蘇姆決心在Python中避免這一錯誤藕施,并獲取了非常好的效果寇损。
? 當前范羅蘇姆仍然是Python的主要開發(fā)者,決定整個Python語言的發(fā)展方向裳食。Python社群經(jīng)常稱呼他是終身仁慈獨裁者(BDFL)矛市。
? Python 2.0于2000年10月16日發(fā)布,增加了實現(xiàn)完整的垃圾回收诲祸,并且支持Unicode浊吏。同時而昨,整個開發(fā)過程更加透明,社群對開發(fā)進度的影響逐漸擴大找田。
? Python 3.0于2008年12月3日發(fā)布歌憨,此版不完全兼容之前的Python源代碼。不過墩衙,很多新特性后來也被移植到舊的Python 2.6/2.7版本务嫡。
2. 特性
- 簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣漆改。它使你能夠?qū)W⒂诮鉀Q問題而不是去搞明白語言本身心铃。
- 易學:Python極其容易上手,因為Python有極其簡單的說明文檔 籽懦。
- 速度快:Python 的底層是用 C 語言寫的于个,很多標準庫和第三方庫也都是用 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)蹋订。這個過程通過編譯器和不同的標記率挣、選項完成。運行程序的時候露戒,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復制到內(nèi)存中并且運行椒功。而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼運行 程序智什。在計算機內(nèi)部动漾,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行荠锭。這使得使用Python更加簡單旱眯。也使得Python程序更加易于移植。
- 面向?qū)ο螅篜ython既支持面向過程的編程也支持面向?qū)ο蟮木幊讨ぞ拧T凇懊嫦蜻^程”的語言中删豺,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中愧怜,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的呀页。
- 可擴展性:如果需要一段關(guān)鍵代碼運行得更快或者希望某些算法不公開,可以部分程序用C或C++編寫叫搁,然后在Python程序中使用它們赔桌。
- 可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能渴逻。
- 豐富的庫:Python標準庫確實很龐大疾党。它可以幫助處理各種工作,包括正則表達式惨奕、文檔生成雪位、單元測試、線程梨撞、數(shù)據(jù)庫雹洗、網(wǎng)頁瀏覽器香罐、CGI、FTP时肿、電子郵件庇茫、XML、XML-RPC螃成、HTML旦签、WAV文件、密碼系統(tǒng)寸宏、GUI(圖形用戶界面)宁炫、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱作Python的“功能齊全”理念氮凝。除了標準庫以外羔巢,還有許多其他高質(zhì)量的庫,如wxPython罩阵、Twisted和Python圖像庫等等竿秆。
- 規(guī)范的代碼:Python采用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼永脓。
3. 設計哲學
? Python的設計哲學是“優(yōu)雅”袍辞、“明確”、“簡單”常摧。Python開發(fā)者的哲學是“用一種方法搅吁,最好是只有一種方法來做一件事”,也因此它和擁有明顯個人風格的其他語言很不一樣落午。在設計Python語言時谎懦,如果面臨多種選擇,Python開發(fā)者一般會拒絕花俏的語法溃斋,而選擇明確沒有或者很少有歧義的語法界拦。這些準則被稱為“Python之禪”。在Python解釋器內(nèi)運行import this可以獲得完整的列表梗劫,下面是其中首要:
優(yōu)美優(yōu)于丑陋享甸。明了優(yōu)于隱晦。
簡單優(yōu)于復雜梳侨。復雜優(yōu)于凌亂蛉威。
扁平優(yōu)于嵌套。稀疏優(yōu)于稠密走哺。
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
4. 應用領域
- Web 和 Internet開發(fā)
- 學計算和統(tǒng)計
- 人工智能
- 桌面界面開發(fā)
- 軟件開發(fā)
- 后端開發(fā)
- 網(wǎng)絡爬蟲
5. 執(zhí)行過程
- Python是一門解釋語言蚯嫌,但是出于效率的考慮,提供了一種編譯的方法。編譯之后就得到pyc文件择示,存儲了字節(jié)碼束凑。Python這點和java很類似,但是Java與Python不同的是栅盲,Python是一個解釋型的語言汪诉,所以編譯字節(jié)碼不是一個強制的操作,事實上剪菱,編譯是一個自動的過程摩瞎,一般不會在意它的存在。編譯成字節(jié)碼可以節(jié)省加載模塊的時間孝常,提高效率。
- Python先把代碼(.py文件)編譯成字節(jié)碼蚓哩,交給字節(jié)碼虛擬機构灸,然后虛擬機(解釋器)一條一條執(zhí)行字節(jié)碼指令,從而完成程序的執(zhí)行岸梨。
- 廣泛使用的是C語言開發(fā)的Python解釋器喜颁,但是也有別的語言開發(fā)的解釋器,同時也有Python語言實現(xiàn)的解釋器曹阔。