內容來源:
版本:1.20
A Byte of Python
Copyright ? 2003-2005 Swaroop C H
簡明 Python 教程《簡明 Python 教程》為 "A Byte of Python" 的唯一指定簡體中文譯本,版權 ? 2005 沈潔元
我最初接觸Python是當我需要為我的軟件鉆石寫一個方便安裝過程的安裝程序的時候。我得在Python和Perl語言中選擇一個綁定Qt庫。我在網(wǎng)上做了一些研究,偶然發(fā)現(xiàn)了一篇文章。那是Eric S. Raymond(著名的電腦高手)談Python如何成為它最喜歡地編程語言的一篇文章。我同時發(fā)現(xiàn)PyQt綁定與Perl-Qt相比要出色得多,所以我選擇了Python語言。
之后我開始尋找一本關于Python的優(yōu)秀書籍。我竟然找不到!雖然我找到了一些O'Reilly的書,不過它們不是太貴就是如同一本參考手冊而不是一本指南。我最后使用了Python附帶的文檔,不過它太簡略了。那個文檔確實很好的給出了Python的概念,不過不夠全面。盡管最后我根據(jù)我以前得編程經驗掌握了那個文檔,不過我覺得它完全不適合于新手。
大約在我首次使用Python語言的六個月之后,我安裝了那時最新的Red Hat 9.0 linux。在我玩弄KWord應用程序的時候,我突然想寫一點關于Python的東西。很快我就寫了30多頁,然后我開始認真地想辦法把它變成一本完整的書。經過 多次 的改進和重寫,它終于成為了一本有用的完整的Python語言學習指南。我把本書貢獻給開源軟件者們。
本書來自于我個人學習Python的筆記,不過我盡力讓它更加適合別人的口味。
在開源精神的鼓舞下,我收到了許多建設性的建議和批評以及來自熱心讀者的反饋,它們使這本書變得更加出色。
本書目前仍然在進一步完善中。許多章節(jié)已經頻繁地做了修改。然而本書已經十分成熟了,你一定可以很容易地通過它學習Python。如果你覺得本書中有什么錯誤或者難懂的地方,請告訴我。
本書將來計劃增加更多的章節(jié),包括wxPython,Twisted,有可能的話甚至還有Boa Constructor。
本書(原版)依照創(chuàng)作共用約定(署名-非商業(yè)作品-保持一致)發(fā)布。簡單地說,你只要署上我的名字,就可以免費復制、分發(fā)和展示本書。未得到我的允許,你禁止把本書用于商業(yè)目的。你在修改本書的時候,必須清楚地標明所有做了改動的地方,你發(fā)布修改后的作品時也必須遵照與本書相同的約定。
請訪問創(chuàng)作公用約定的網(wǎng)站瀏覽約定全文,或者查看一個簡單易懂的約定描述。那里還有一個連環(huán)畫似的約定條款的解釋。
我盡了很大的力讓這本書即生動又盡可能的準確。然而,如果你找到任何不太令你滿意的地方或者錯誤,或者是需要改進的地方,請告訴我以便我改正它們。你可以把它們通過swaroop@byteofpython.info發(fā)送給我。
Python語言是少有的一種可以稱得上即簡單又功能強大的編程語言。你將驚喜地發(fā)現(xiàn)Python語言是多么地簡單,它注重的是如何解決問題而不是編程語言的語法和結構。
Python的官方介紹是:Python是一種簡單易學,功能強大的編程語言,它有高效率的高層數(shù)據(jù)結構,簡單而有效地實現(xiàn)面向對象編程。Python簡潔的語法和對動態(tài)輸入的支持,再加上解釋性語言的本質,使得它在大多數(shù)平臺上的許多領域都是一個理想的腳本語言,特別適用于快速的應用程序開發(fā)。
Python語言的創(chuàng)造者Guido van Rossum是根據(jù)英國廣播公司的節(jié)目“蟒蛇飛行馬戲”命名這個語言的,并非他本人特別喜歡蛇纏起它們的長身軀碾死動物覓食。
2.Python的特色
簡單Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語一樣,盡管這個英語的要求非常嚴格!Python的這種偽代碼本質是它最大的優(yōu)點之一。它使你能夠專注于解決問題而不是去搞明白語言本身。
易學就如同你即將看到的一樣,Python極其容易上手。前面已經提到了,Python有極其簡單的語法。
免費、開源Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發(fā)布這個軟件的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用于新的自由軟件中。FLOSS是基于一個團體分享知識的概念。這是為什么Python如此優(yōu)秀的原因之一——它是由一群希望看到一個更加優(yōu)秀的Python的人創(chuàng)造并經常改進著的。
高層語言當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節(jié)。
可移植性由于它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無需修改就可以在下述任何平臺上面運行。
這些平臺包括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!
解釋性這一點需要一些解釋。
一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連接/轉載器軟件把你的程序從硬盤復制到內存中并且運行。
而Python語言寫的程序不需要編譯成二進制代碼。你可以直接從源代碼 運行 程序。在計算機內部,Python解釋器把源代碼轉換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機使用的機器語言并運行。事實上,由于你不再需要擔心如何編譯程序,如何確保連接轉載正確的庫等等,所有這一切使得使用Python更加簡單。由于你只需要把你的Python程序拷貝到另外一臺計算機上,它就可以工作了,這也使得你的Python程序更加易于移植。
面向對象Python即支持面向過程的編程也支持面向對象的編程。在 面向過程 的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構建起來的。在 面向對象 的語言中,程序是由數(shù)據(jù)和功能組合而成的對象構建起來的。與其他主要的語言如C++和java相比,Python以一種非常強大又簡單的方式實現(xià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)有關的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。
除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python圖像庫等等。
3.為什么不使用Perl
也許你以前并不知道,Perl是另外一種極其流行的開源解釋性編程語言。
如果你曾經嘗試過用Perl語言編寫一個大程序,你一定會自己回答這個問題。在規(guī)模較小的時候,Perl程序是簡單的。它可以勝任于小型的應用程序和腳本,“使工作完成”。然而,當你想開始寫一些大一點的程序的時候,Perl程序就變得不實用了。我是通過為Yahoo編寫大型Perl程序的經驗得出這樣的總結的!
與Perl相比,Python程序一定會更簡單、更清晰、更易于編寫,從而也更加易懂、易維護。我確實也很喜歡Perl,用它來做一些日常的各種事情。不過當我要寫一個程序的時候,我總是想到使用Python,這對我來說已經成了十分自然的事。Perl已經經歷了多次大的修正和改變,遺憾的是,即將發(fā)布的Perl 6似乎仍然沒有在這個方面做什么改進。
我感到Perl唯一也是十分重要的優(yōu)勢是它龐大的CPAN庫——綜合Perl存檔網(wǎng)絡。就如同這個名字所指的意思一樣,這是一個巨大的Perl模塊集,它大得讓人難以置信——你幾乎用這些模塊在計算機上做任何事情。Perl的模塊比Python多的原因之一是Perl擁有更加悠久的歷史。或許我會在comp.lang.python上建議把Perl模塊移植到Python上的計劃。
另外,新的Parrot虛擬機按設計可以運行完全重新設計的Perl 6也可以運行Python和其他解釋性語言如Ruby、php和Tcl等等。這意味著你將來 或許 可以在Python上使用所有Perl的模塊。這將成為兩全其美的事——強大的CPAN庫與強大的Python語言結合在一起。我們將拭目以待。
4.程序員的話
讀一下像ESR這樣的超級電腦高手談Python的話,你會感到十分有意思:
Eric S. Raymond是《The Cathedral and the Bazaar》的作者、“開放源碼”一詞的提出人。他說Python已經成為了他最喜愛的編程語言。點擊打開鏈接這篇文章也是促使我第一次接觸Python的真正原動力。
Bruce Eckel著名的《Thinking in Java》和《Thinking in C++》的作者。他說沒有一種語言比得上Python使他的工作效率如此之高。同時他說Python可能是唯一一種旨在幫助程序員把事情弄得更加簡單的語言。請閱讀完整的采訪以獲得更詳細的內容。
Peter Norvig是著名的Lisp語言書籍的作者和Google公司的搜索質量主任(感謝Guido van Rossum告訴我這一點)。他說Python始終是Google的主要部分。事實上你看一下Google招聘 點擊打開鏈接的網(wǎng)頁就可以驗證這一點。在那個網(wǎng)頁上,Python知識是對軟件工程師的一個必需要求。
Bruce Perens是OpenSource.org和UserLinux項目的一位共同創(chuàng)始人。UserLinux旨在創(chuàng)造一個可以被多家發(fā)行商支持標準的Linux發(fā)行版。Python擊敗了其它競爭對手如Perl和Ruby成為UserLinux支持的主要編程語言。
如果你正在使用一個Linux的發(fā)行版比如Fedora或者Mandrake或者其他(你的選擇),或者一個BSD系統(tǒng)比如FreeBSD,那么你可能已經在你的系統(tǒng)里安裝了Python。
要測試你是否已經隨著你的Linux包安裝了Python,你可以打開一個shell程序(就像konsole或gnome-terminal)然后輸入如下所示的命令python -V。
$ python -VPython 2.3.4
注釋$是shell的提示符。根據(jù)你的操作系統(tǒng)的設置,它可能與你那個不同,因此我只用$符號表示提示符。
如果你看見向上面所示的那樣一些版本信息,那么你已經安裝了Python了。
如果你得到像這樣的消息:
$ python -Vbash: python: command not found
那么你還沒有安裝Python。這幾乎不可能,只是極其偶爾才會遇到。
在這種情況下,你有兩種方法在你的系統(tǒng)上安裝Python。
利用你的操作系統(tǒng)附帶的包管理軟件安裝二進制包,比如Fedora Linux的yum、Mandrake Linux的urpmi、Debian Linux的apt-get、FreeBSD的pkg_add等等。注意,使用這種方法的話,你需要連接因特網(wǎng)。
你也可以從別的地方下載二進制包然后拷貝到你的PC中安裝。
你可以從源代碼編譯Python然后安裝。在網(wǎng)站上有編譯的指令。
2.Windows用戶Windows?用戶可以訪問Python.org/download,從網(wǎng)站上下載最新的版本(在寫本書的時候,最新版本是2.3.4版)。它的大小大約是9.4MB,與其他大多數(shù)語言相比是十分緊湊的。安裝過程與其他Windows軟件類似。
提示即便安裝程序為你提供了不檢查 可選 組件的選項,你也不要不作任何檢查!有些組件對你很有用,特別是集成開發(fā)環(huán)境。
有趣的是,大約70%的Python下載是來自Windows用戶的。當然,這并不能說明問題,因為幾乎所有的Linux用戶已經在安裝系統(tǒng)的時候默認安裝了Python。
在Windows命令行中使用Python如果你想要從Windows命令行調用Python,那么你需要先正確的設置PATH變量。對于Windows 2000、XP、2003,點擊控制面板->系統(tǒng)->高級->環(huán)境變量。在“系統(tǒng)變量”表單中點擊叫做PATH的變量,然后編輯這個變量,把;C:/Python23加到它的結尾。當然,是Python所在的正確目錄名。對于較舊版本的Windows,把下面這行加到文件C:/AUTOEXEC.BAT中:PATH=%PATH%;C:/Python23,然后重新啟動系統(tǒng)。對于Windows NT,則使用AUTOEXEC.NT文件。
3.概括對于Linux系統(tǒng),很可能你已經在你的系統(tǒng)里安裝了Python。否則,你可以通過你的發(fā)行版附帶的包管理軟件安裝Python。對于Windows系統(tǒng),安裝Python就是下載安裝程序然后雙擊它那么簡單。從現(xiàn)在起,我們將假設你已經在你的系統(tǒng)里安裝了Python。
1.簡介
我們將看一下如何用Python編寫運行一個傳統(tǒng)的“Hello World”程序。通過它,你將學會如何編寫、保存和運行Python程序。
有兩種使用Python運行你的程序的方式——使用交互式的帶提示符的解釋器或使用源文件。我們將學習這兩種方法。
2.使用帶提示符的解釋器
在命令行的shell提示符下鍵入python,啟動解釋器。現(xiàn)在輸入,然后按Enter鍵。你應該可以看到輸出的單詞Hello World。
對于Windows用戶,只要你正確的設置了PATH變量,你應該可以從命令行啟動解釋器。或者你可以選擇使用IDLE程序。IDLE是集成開發(fā)環(huán)境的縮寫。點擊開始->程序->Python 2.3->IDLE(Python GUI)。Linux用戶也可以使用IDLE。
注意,>>>是你鍵入Python語句的提示符。
例3.1 使用帶提示符的Python解釋器
$ pythonPython 2.3.4 (#1, Oct 26 2004, 16:42:40)[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> print 'hello world'hello world>>>
注意,Python會在下一行立即給出你輸出!你剛才鍵入的是一句Python 語句 。我們使用print(不要驚訝)來打印你提供給它的值。這里,我們提供的是文本Hello World,它被迅速地打印在屏幕上。
如何退出Python提示符如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。如果是在Windows命令行中,則按Ctrl-z再按Enter。
3.挑選一個編輯器
在我們開始講述以源文件方式編寫Python程序之前,我們需要一個編輯器來寫源文件。挑選一個編輯器確實是極其重要的。你挑選一個編輯器就如同你挑選一輛你將購買的轎車一樣。一個好的編輯器會幫助你方便地編寫Python程序,使你地編程旅程更加舒適,幫助你更加快捷安全地到達目的地(實現(xiàn)目標)。
對于編輯器的基本要求之一是語法加亮功能,利用這一功能,你的Python程序的不同部分被標以不同的顏色,這樣你可以更好 看清楚 你的程序,使它的運行顯得形象化。
如果你使用Windows,那么我建議你使用IDLE。IDLE具備語法加亮功能,還有許多其他的功能,比如允許你在IDLE中運行你的程序。特別值得注意的是:不要使用Notepad——它是一個糟糕的選擇,因為它沒有語法加亮功能,而且更加重要的是,它不支持文本縮進。而我們將會看到文本縮進對于我們來說極其重要。一個好的編輯器,比如IDLE(還有VIM)將會自動幫助你做這些事情。
如果你使用Linux/FreeBSD,那么你有很多種選擇。如果你是一位有經驗的程序員,你一定已經在使用VIM或者Emacs了。勿庸置疑,它們是兩個功能最強大的編輯器。使用它們編寫你的Python程序,你將從中受益。我個人使用VIM編寫我的大多數(shù)程序。如果你是一個初學編程的人,那么你可以使用Kate,它也是我最喜歡的編輯器之一。只要你愿意花時間學習使用VIM或Emacs,那么我強烈建議你一定要學習兩者之一,因為從長遠看來它們對你是極其有幫助的。
如果你還想尋找一下其他可供選擇的編輯器,可以看一下詳盡的Python編輯器列表,然后作出你的選擇。你也可以使用Python的IDE(集成開發(fā)環(huán)境)。請看一下詳盡的支持Python的IDE列表以獲得詳盡的信息。一旦你開始編寫大型的Python程序,IDE確實很有用。
我再一次重申,請選擇一個合適的編輯器——它能使編寫Python程序變得更加有趣、方便。
4.使用源文件
現(xiàn)在讓我們重新開始編程。當你學習一種新的編程語言的時候,你編寫運行的第一個程序通常都是“Hello World”程序,這已經成為一種傳統(tǒng)了。在你運行“Hello World”程序的時候,它所做的事只是說聲:“Hello World”。正如提出“Hello World”程序的Simon Cozens[1]所說:“它是編程之神的傳統(tǒng)咒語,可以幫助你更好的學習語言。”
啟動你選擇的編輯器,輸入下面這段程序,然后把它保存為helloworld.py。
#!/usr/bin/python# Filename : helloworld.pyprint 'Hello World'
(源文件:code/helloworld.py)
為了運行這個程序,請打開shell(Linux終端或者DOS提示符),然后鍵入命令python helloworld.py。如果你使用IDLE,請使用菜單Edit->Run Script或者使用鍵盤快捷方式Ctrl-F5。輸出如下所示。
$ python helloworld.pyHello World
如果你得到的輸出與上面所示的一樣,那么恭喜!——你已經成功地運行了你的第一個Python程序。
萬一你得到一個錯誤,那么請確保你鍵入的程序 準確無誤 ,然后再運行一下程序。注意Python是大小寫敏感的,即print與Print不一樣——注意前一個是小寫p而后一個是大寫P。另外,確保在每一行的開始字符前沒有空格或者制表符——我們將在后面討論為什么這點是重要的。
讓我們思考一下這個程序的前兩行。它們被稱作 注釋 ——任何在#符號右面的內容都是注釋。注釋主要作為提供給程序讀者的筆記。
Python至少應當有第一行那樣的特殊形式的注釋。它被稱作 組織行 ——源文件的頭兩個字符是#!,后面跟著一個程序。這行告訴你的Linux/Unix系統(tǒng)當你 執(zhí)行 你的程序的時候,它應該運行哪個解釋器。這會在下一節(jié)做詳細解釋。注意,你總是可以通過直接在命令行指定解釋器,從而在任何平臺上運行你的程序。就如同命令python helloworld.py一樣。
重要在你的程序中合理地使用注釋以解釋一些重要的細節(jié)——這將有助于你的程序的讀者輕松地理解程序在干什么。記住,這個讀者可能就是6個月以后的你!
跟在注釋之后的是一句Python 語句 ——它只是打印文本“Hello World”。print實際上是一個操作符,而“Hello World”被稱為一個字符串——別擔心我們會在后面詳細解釋這些術語。
5.可執(zhí)行的python程序
新聞熱點
疑難解答